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 <- cbind(data , as.data.frame(rowSums(data[,Vec]) ))
,事实上我有生成向量的 for 循环和每次我创建变量来放置我想要的结果(我的向量中的变量总和)所以我不知道如何在不知道向量元素的情况下影响名称
如果您需要更多说明或信息,请告诉我
谢谢
【问题讨论】:
试试data$ACD <- 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使用向量创建新列包含变量的名称的主要内容,如果未能解决你的问题,请参考以下文章