我有一个如下所示的表格
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_A
、difference_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)
它给了我错误消息“列的重复下标”
最佳答案
一个 dplyr
和 purrr
解决方案可以是:
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/