r - 如何根据R中具有相同字符串的两列的计算添加具有相同逻辑的多个新列

标签 r

我有一个如下所示的表格

data <- data.frame(A = c(1,2,3,4,5),
                   B = c(1,2,3,4,5),
                   C = c(11,12,13,14,15),
                   trans_A = c(NA,1,2,3,4),
                   trans_B = c(NA,1,2,3,4),
                   trans_C = c(NA,11,12,13,14))

我需要为这个数据框创建/添加多个新列,新名称为 difference_Adifference_B 等,逻辑 difference_A = A - trans_A difference_B = B - trans_B 等。如何在 R 中执行此操作?

我试过这个:

new_df[paste("difference", cols, sep = "_")]<- c(NA, new_df[cols]-new_df[paste("trans",cols,sep = "_")], na.rm=TRUE)

它给了我错误消息“列的重复下标”

最佳答案

一个 dplyrpurrr 解决方案可以是:

map(.x = names(select(data, -starts_with("trans_"))),
    ~ data %>%
     mutate(across(all_of(.x), .names = "difference_{col}") - across(all_of(paste0("trans_", .x))))) %>%
 reduce(full_join)

  A B  C trans_A trans_B trans_C difference_A difference_B difference_C
1 1 1 11      NA      NA      NA           NA           NA           NA
2 2 2 12       1       1      11            1            1            1
3 3 3 13       2       2      12            1            1            1
4 4 4 14       3       3      13            1            1            1
5 5 5 15       4       4      14            1            1            1

关于r - 如何根据R中具有相同字符串的两列的计算添加具有相同逻辑的多个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66013602/

相关文章:

r - 在R中使用apply或map函数时如何将列名传递给函数?

r - Shiny /R : Hide error message when no value in selectizeInput

r - 如何提取所有内容直到模式第一次出现

r - 如何将向量的第 i 个元素粘贴到向量列表的第 i 个元素

r - 图例中的更长的行()

regex - 删除字符串中选定单词之间的空格

r - 检测宽数据框上的异常值

r - R 中的算术级数系列

json - 使用R将JSON文件转换为CSV文件

r markdown - 用新行格式化代码块中的文本