如何将R数据框中除Steve和Adam列外的列转为数值型?
问题描述
我有如下结构的DataFrame:
Steve 2005 2006 2007 2008 2009 2010 Adam 134 24 42 45 56 43 32 54 # 另有50行数据
希望将所有列转换为数值型,但Steve和Adam列保持字符型不变。我尝试了以下代码,但它会把所有列都转为数值型:
df %>% mutate_if(is.character,as.numeric)
解决方案
可以通过指定排除列的方式,只对目标列执行数值转换:
- 使用
mutate_at(适用于旧版dplyr):
df %>% mutate_at(vars(-Steve, -Adam), as.numeric)
vars(-Steve, -Adam)表示排除Steve和Adam列,仅对剩余列执行as.numeric转换。
- 使用
mutate_if结合列名判断:
df %>% mutate_if(~!colnames(df) %in% c("Steve", "Adam"), as.numeric)
通过逻辑条件筛选出列名不在指定列表中的列,再进行数值转换。
- 使用
across(dplyr 1.0.0及以上版本推荐):
df %>% mutate(across(-c(Steve, Adam), as.numeric))
across是dplyr新版本的语法,-c(Steve, Adam)直接排除目标列,写法更简洁直观。
内容的提问来源于stack exchange,提问作者Sara Dwindler
相关产品推荐
相关产品推荐

