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

Posted

技术标签:

【中文标题】R使用向量创建新列包含变量的名称【英文标题】:R Creating new columns using vector contains name of variables 【发布时间】:2021-12-18 13:31:26 【问题描述】:

我有一个数据和一个包含变量名称的向量,我想创建一个新变量,其中包含我的向量中的变量行和,我希望新变量的名称(我的向量中的变量总和)是名称的串联变量

例如我有这个数据

> 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 &lt;- cbind(data , as.data.frame(rowSums(data[,Vec]) )),事实上我有生成向量的 for 循环和每次我创建变量来放置我想要的结果(我的向量中的变量总和)所以我不知道如何在不知道向量元素的情况下影响名称

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

谢谢

【问题讨论】:

试试data$ACD &lt;- cbind(data , as.data.frame(rowSums(data[,Vec]) ))。在我看来,您的计算是错误的,例如对于r1 1+12+21 是 33,而不是 34。 感谢您的评论,问题是我不知道元素(我的向量中变量的名称)我只是将问题编辑得更清楚,也感谢您的纠正 【参考方案1】:

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

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

【讨论】:

感谢您的回答,它适用于我的程序 请接受答案 你好,我已经做了,谢谢【参考方案2】:

这是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

【讨论】:

以上是关于R使用向量创建新列包含变量的名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr 复制一列并为 R 中的新列添加前缀

将向量合并为 df,并将向量名称转换为新列的行

使用列表理解 Python 创建新列

R中有没有办法创建一个新列,根据其他列分配值? [复制]

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列

函数R中的Dplyr变量名称