如何将R数据框中的列按指定编码转换为数值
在R中根据编码映射表转换数据框列值
以下是几种实现椎骨级别字符到数值转换的方法,适配你的需求:
先修正示例数据(给列命名方便后续操作)
# 原始数据框,指定列名为vertebra df_example <- data.frame(vertebra = c("S1", "C2", "T3","L1"), stringsAsFactors = FALSE) # 编码映射数据框 df_code <- data.frame( vertebra = c("C1","C2","C3","T1","T2","T3","L1","L2","L3","S1","S2"), value = c(1,2,3,4,5,6,7,8,9,10,11), stringsAsFactors = FALSE )
方法1:基础R merge() 函数
直接通过合并操作完成匹配,保留原始数据的所有行:
df_output <- merge(df_example, df_code, by = "vertebra", all.x = TRUE) # 输出结果 df_output
all.x = TRUE 参数确保即使原始数据中有未匹配的项,也不会被丢弃(你的示例中所有项都能匹配)。
方法2:基础R match() 函数
快速生成转换后的新列,无需合并整个数据框:
# 给原始数据框添加转换后的数值列 df_example$value <- df_code$value[match(df_example$vertebra, df_code$vertebra)] # 查看结果 df_example
match() 会返回原始列每个值在映射表中的位置,再通过位置索引取出对应的数值。
方法3:tidyverse left_join() 函数
适合使用管道流的tidy风格代码,需要先加载dplyr包:
library(dplyr) df_output <- df_example %>% left_join(df_code, by = "vertebra")
left_join() 的效果和merge(..., all.x = TRUE)一致,保留左侧数据的所有行并匹配映射值。
注意事项
- 确保用于匹配的列(示例中的
vertebra)在两个数据框中内容格式完全一致(无空格、大小写统一),否则会出现匹配失败的NA值。 - 如果两个数据框的匹配列名不同,可以在
by参数中指定对应关系,比如by = c("col_in_example" = "col_in_code")。
内容的提问来源于stack exchange,提问作者Elizabeth Driskill
相关产品推荐
相关产品推荐

