如何使用dplyr将选中列的所有值替换为x_i = x_max - x_i计算结果
单列实现方案
直接在mutate中对目标列做向量化运算即可,不需要调用replace,R的向量运算会自动将公式应用到该列的每一行:
df1 <- df %>% # 若确认列中无缺失值可去掉na.rm = TRUE参数 mutate(column1 = max(column1, na.rm = TRUE) - column1)
多列批量实现方案
用dplyr 1.0.0及以上版本支持的across()函数即可实现同一句代码批量处理多列,支持多种列选择规则:
- 手动指定要转换的列名
df1 <- df %>% mutate( # 把c(列1,列2,列3)替换为你要处理的实际列名即可 across(c(column1, column2, column3), ~ max(.x, na.rm = TRUE) - .x) )
- 自动匹配所有数值型列做转换
df1 <- df %>% mutate( across(where(is.numeric), ~ max(.x, na.rm = TRUE) - .x) )
- 按列位置选择转换范围,比如处理第2到第6列:
df1 <- df %>% mutate( across(2:6, ~ max(.x, na.rm = TRUE) - .x) )
如果需要保留原始列,只新增转换后的列,可以添加.names参数指定新列命名规则,示例如下:
df1 <- df %>% mutate( across(c(column1, column2), ~ max(.x, na.rm = TRUE) - .x, .names = "{.col}_max_reverse") )
运行后会新增column1_max_reverse、column2_max_reverse两列存储转换结果,原有列数据保持不变。
内容的提问来源于stack exchange,提问作者js2822
相关产品推荐
相关产品推荐

