能否使用dplyr::select同时选择列并更新?实操报错求助
问题解决
错误原因
as.numeric()只能处理单个向量,而select(b,c)返回的是一个数据框(本质是列表结构),直接对数据框使用as.numeric()会触发类型转换错误——列表无法被强制转为数值型向量,这就是报错的原因。
正确实现代码
方法1:用mutate_all()批量转换(适配旧版dplyr)
要同时完成选列、转类型并修改原数据框a,可以这么写:
library(dplyr) a %<>% select(b,c) %>% mutate_all(as.numeric)
方法2:用mutate(across())精准转换(dplyr 1.0.0+推荐写法)
如果需要更灵活地指定转换列,推荐用across():
library(dplyr) a %<>% select(b,c) %>% mutate(across(c(b,c), as.numeric))
方法3:生成新数据框(不修改原数据)
要是不想改动原数据框a,可以把结果赋值给新变量:
library(dplyr) new_a <- a %>% select(b,c) %>% mutate(across(c(b,c), as.numeric))
验证转换结果
运行代码后,用str()查看数据结构,就能确认b、c列已经变成数值型:
str(a) # 输出会显示 b: num [1:4] 1 2 3 4; c: num [1:4] 6 6 6 6
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

