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
我有一个数据和一个包含变量名称的向量,我想创建包含向量中变量行和的新变量,我希望将新变量的名称(向量中变量的总和)连接起来变量名称
例如我有这个数据
> 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