首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: combn函数并定义生成变量的名称

R: combn函数并定义生成变量的名称
EN

Stack Overflow用户
提问于 2019-11-20 03:56:07
回答 1查看 122关注 0票数 1

我有一个名为“dat”的数据框,其中包含5个数值变量(var1、var2、var3、var4、var5),每个变量包含20个观测值。

代码语言:javascript
复制
structure(list(var_1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20), var_2 = c(7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26), var_3 = c(4, 
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23), var_4 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
15, 16, 17, 18, 19, 20, 21)), row.names = c(NA, -20L), class = c("tbl_df", 
"tbl", "data.frame"))

我使用这段代码来创建一个新的数据框(名为“组合”),并将5个变量的所有可能组合对与组合在一起的2个变量的平均值进行组合:

代码语言:javascript
复制
combined <- combn(dat, 2, FUN = rowMeans)

这就是结果:

代码语言:javascript
复制
structure(c(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
18, 19, 20, 21, 22, 23, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 
10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 
21.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 
12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 5.5, 6.5, 
7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 
18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 4.5, 5.5, 6.5, 7.5, 
8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 
19.5, 20.5, 21.5, 22.5, 23.5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22), .Dim = c(20L, 6L))

1)代码运行良好,但问题是数据框中新生成的变量被命名为V1、V2、V3、V4…。我不能理解每个新的变量,这些变量的组合是从哪里来的。我更喜欢将新生成的变量命名为“var1var2”、“var1var3”等…有没有办法获得这一点?

2)另外,有没有一种方法只将combn函数应用于某些列,而不应用于数据帧“dat”中存在的所有变量?

3)如何将新生成的变量添加到原始数据框“dat”中,而不是保存到新的数据框中?

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 05:27:39

这可以通过使用列名重做combn语句来完成

代码语言:javascript
复制
set.seed(99)
dat <- data.frame(var1 = sample(20),           #some sample data
                  var2 = sample(20),           #I did this before you added your data above!
                  var3 = sample(20),
                  var4 = sample(20),
                  var5 = sample(20))

dat
   var1 var2 var3 var4 var5
1    12    5   18   19   12
2     3    2   10    6   13
3    13   15   14   13    1
4    17   11   16   18   10
5     9   13    8    8    7
6    15    6   20   17    3  
...

combined <- combn(dat, 2, FUN = rowMeans)      #your statement using cols of dat

colnames(combined) <- combn(names(dat), 2, paste0, collapse="") #same using colnames

combined

      var1var2 var1var3 var1var4 var1var5 var2var3 var2var4 var2var5 var3var4 var3var5 var4var5
 [1,]      8.5     15.0     15.5     12.0     11.5     12.0      8.5     18.5     15.0     15.5
 [2,]      2.5      6.5      4.5      8.0      6.0      4.0      7.5      8.0     11.5      9.5
 [3,]     14.0     13.5     13.0      7.0     14.5     14.0      8.0     13.5      7.5      7.0
 [4,]     14.0     16.5     17.5     13.5     13.5     14.5     10.5     17.0     13.0     14.0
 [5,]     11.0      8.5      8.5      8.0     10.5     10.5     10.0      8.0      7.5      7.5
 [6,]     10.5     17.5     16.0      9.0     13.0     11.5      4.5     18.5     11.5     10.0
 ...

要回答其他问题,您可以限制使用的列,例如,在comb语句中使用dat[,c(2,3,6)] (使用第2、3和6列)。您可以使用dat <- cbind(dat, combined)将它们重新添加到同一数据框中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58941917

复制
相关文章

相似问题

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