如何在R语言中使用across函数实现对应后缀列的求和
使用mutate+across实现同名后缀列求和
首先你的原始数据:
data <- tibble(X = c(1,2,3,4), X_2 = c(2,3,4,5), Y = c(3,4,5,6), Y_2 = c(4,5,6,7))
你的需求是对X与X_2、Y与Y_2分别求和,生成新列X_3和Y_3。之前的两种写法失败原因如下:
- 写法一中的
._2错误:.代表当前列的数值向量,不是列名,无法通过._2引用对应后缀列 - 写法二中的
paste0(.,"_2")错误:这是把当前列的每个数值拼接成字符串,而非引用目标列
以下是两种可行的解决方法:
方法一:用cur_column() + .data[[ ]]
data %>% mutate(across(c(X, Y), ~ . + .data[[paste0(cur_column(), "_2")]], .names = "{col}_3"))
cur_column()会返回当前处理的列名(比如处理X时返回"X"),拼接"_2"后得到目标列名,再通过.data[[列名]]提取对应列的数值进行求和。
方法二:用cur_column() + get()
data %>% mutate(across(c(X, Y), ~ . + get(paste0(cur_column(), "_2")), .names = "{col}_3"))
get()函数可以根据字符串形式的列名提取对应列的值,逻辑和方法一一致,只是换了一种引用列的方式。
运行上述代码后,最终结果会新增X_3和Y_3列,对应数值分别为X+X_2、Y+Y_2的和。
内容的提问来源于stack exchange,提问作者Rousitutu
相关产品推荐
相关产品推荐

