如何在dplyr的mutate across中结合因子列与列名排除条件?
解决方案
要实现**因子类型且列名不等于"bla"**的条件组合,你可以在where()里通过逻辑与运算符&,结合cur_column()函数判断当前列名,修改后的代码如下:
df %>% mutate(across(where(~ is.factor(.) & cur_column() != "bla"), ~ as.numeric(levels(.))[.]))
代码说明
cur_column():获取当前正在处理的列名,用来和"bla"做不等于判断is.factor(.) & cur_column() != "bla":只有同时满足这两个条件的列才会被选中处理- 后面的
~ as.numeric(levels(.))[.]保留你原来的因子转数值逻辑不变
测试示例
如果需要验证效果,可以用下面的测试数据:
# 创建测试数据框 df <- tibble( col1 = factor(c("1", "2", "3")), bla = factor(c("a", "b", "c")), col2 = factor(c("4", "5", "6")), col3 = c(7, 8, 9) # 非因子列,不会被处理 ) # 运行修改后的代码 df_processed <- df %>% mutate(across(where(~ is.factor(.) & cur_column() != "bla"), ~ as.numeric(levels(.))[.])) # 查看结果 df_processed
运行后你会发现col1和col2被转成了数值,bla列保持因子类型不变,col3也不受影响。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

