我有一个数据和一个包含变量名称的向量,我希望在我的向量中创建包含变量行和的新变量,并且我希望新变量的名称(我的向量中的变量之和)是变量名称的连接。
例如,我有这样的数据
> 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循环,每次我创建变量来表示我想要的结果(向量中变量的和),所以我不知道如何在不知道向量元素的情况下影响名称。
如果你需要更多的澄清或信息,请告诉我
谢谢
发布于 2021-11-04 10:56:29
这不是一个单行解决方案,但是您可以在后面的行上设置名称:
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发布于 2021-11-04 11:52:56
下面是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 14https://stackoverflow.com/questions/69837231
复制相似问题