如何用dplyr将数据框中以_id结尾的列转为数值型?
使用dplyr将以_id结尾的因子列转换为数值型
没问题,这在dplyr里可以很优雅地实现,我给你两种实用的方法,你可以根据自己的需求和dplyr版本选择:
方法1:使用across()(推荐,dplyr 1.0.0+)
across()是dplyr 1.0.0版本推出的新函数,专门用来批量处理列,搭配ends_with()可以精准匹配所有以_id结尾的列。
这里要提个关键注意点:直接对因子使用as.numeric()会返回因子的水平索引值,而不是因子本身的数值内容,这通常不是我们想要的结果。所以稳妥的做法是先把因子转成字符,再转成数值。
示例代码如下:
library(dplyr) # 假设你的数据框名为df df <- df %>% mutate(across(ends_with("_id"), ~ as.numeric(as.character(.x))))
方法2:使用mutate_at()(兼容旧版dplyr)
如果你使用的是dplyr 1.0.0之前的版本,可以用mutate_at()来实现同样的功能,逻辑和上面一致:
df <- df %>% mutate_at(vars(ends_with("_id")), ~ as.numeric(as.character(.x)))
额外注意事项
- 在转换前,建议先检查这些
_id列的因子水平,确认没有非数值的异常值(比如字符型乱码、无意义字符串等),否则转换后会生成NA。你可以用count(df, food_id)(替换成具体列名)来查看某列的取值分布。 - 如果你的
_id因子列的水平带前缀(比如"FOOD_1"),直接转换会得到NA,这种情况你可能需要先提取数值部分再做转换。
内容的提问来源于stack exchange,提问作者Jazzmatazz
相关产品推荐
相关产品推荐

