首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R使用向量创建新列包含变量名称。

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

Stack Overflow用户
提问于 2021-11-04 09:48:20
回答 2查看 246关注 0票数 3

我有一个数据和一个包含变量名称的向量,我希望在我的向量中创建包含变量行和的新变量,并且我希望新变量的名称(我的向量中的变量之和)是变量名称的连接。

例如,我有这样的数据

代码语言:javascript
复制
> 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

而这个向量

代码语言:javascript
复制
>Vec

"A" , "C" , "D"

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

我想要的结果如下:

代码语言:javascript
复制
 > 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

我试过这个:

代码语言:javascript
复制
data <- cbind(data , as.data.frame(rowSums(data[,Vec]) ))

但我不知道如何创建这个名字

这是我得到的结果

代码语言:javascript
复制
 >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循环,每次我创建变量来表示我想要的结果(向量中变量的和),所以我不知道如何在不知道向量元素的情况下影响名称。

如果你需要更多的澄清或信息,请告诉我

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-04 10:56:29

这不是一个单行解决方案,但是您可以在后面的行上设置名称:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-11-04 11:52:56

下面是janitor包的一个选项。您可以使用adorn_totals,它将总计、行或列附加到data.frame。在本例中,name参数包括新列的名称,最后包含的Vec包含要总计的列。

代码语言:javascript
复制
library(janitor)

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

输出

代码语言:javascript
复制
 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69837231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档