R使用向量创建新列包含变量名称

R Creating new columns using vector contains name of variables

我有一个数据和一个包含变量名称的向量,我想创建包含向量中变量行和的新变量,我希望将新变量的名称(向量中变量的总和)连接起来变量名称

例如我有这个数据

> data
Name      A    B    C    D    E
r1        1    5    12  21    15
r2        2    4     7  10     9
r3        5   15     6   9     6
r4        7    8     0   7    18

和这个矢量

>Vec

"A" , "C" , "D"

我想要的结果是变量 A、C 和 D 的总和,我的变量名称是 ACD

这是我想要的结果:

 > data
    Name      A    B    C    D   ACD    E
    r1        1    5    12  21    34   15
    r2        2    4     7  10    18    9
    r3        5   15     6   9    20    6
    r4        7    8     0   7    14   18

我试过了:

data <- cbind(data , as.data.frame(rowSums(data[,Vec]) ))

但是我不知道怎么起名字

这是我得到的结果

 >data
    
       Name       A    B    C    D     E  rowSums(data[,Vec])
        r1        1    5    12  21    15    34
        r2        2    4     7  10     9    18
        r3        5   15     6   9     6    20
        r4        7    8     0   7    18    14

并不是说我只是举了一个示例来解释我想做什么

我想对我的旧数据(包含新变量)做一些影响,就像我在上面的命令中所做的那样

编辑 1:在我的真实程序中,我不知道向量中的元素(我的变量的名称,所以我不能按照 Pax 的建议执行 data$ACD <- cbind(data , as.data.frame(rowSums(data[,Vec]) )),事实上我有 for 循环生成我的向量,每次我创建变量来放置我想要的结果(向量中变量的总和)所以我不知道如何在不知道向量元素的情况下影响名称

如果您需要更多说明或信息,请告诉我

谢谢

这不是单行解决方案,但您可以在后续行中设置名称:

data <- data.frame(A = c(1, 2, 5, 7), 
                   B = c(5, 4, 15, 8), 
                   C = c(12, 7, 6, 0), 
                   D = c(21, 10, 9, 7), 
                   E = c(15, 9, 6, 18))
Vec <- c("A" , "C" , "D")

data <- cbind(data, rowSums(data[,Vec]))

# Add name
names(data)[ncol(data)] <- paste(Vec, collapse="")


#   A  B  C  D  E ACD
# 1 1  5 12 21 15  34
# 2 2  4  7 10  9  19
# 3 5 15  6  9  6  20
# 4 7  8  0  7 18  14

这是 janitor 包的一个选项。您可以使用 adorn_totals 将总计行或列附加到 data.frame。在这种情况下,name 参数包括新列的名称,末尾包含的最终 Vec 包括总计的列。

library(janitor)

adorn_totals(data, "col", fill = NA, na.rm = TRUE, name = paste(Vec, collapse = ""), all_of(Vec))

输出

 A  B  C  D  E ACD
 1  5 12 21 15  34
 2  4  7 10  9  19
 5 15  6  9  6  20
 7  8  0  7 18  14