独特的柱组合

发布于 2024-10-18 09:11:53 字数 838 浏览 3 评论 0原文

这是我的简化数据集:

foo <- data.frame(var1= c(1:10), var2=rep(1:5,2),var3=rep(1:2,5),var4=rep(3:7,2) )    

总共 20 个变量,

foo

   var1 var2 var3   var4    ... var20
1     1    1    1      3
2     2    2    2      4
3     3    3    1      5
4     4    4    2      6
5     5    5    1      7
6     6    1    2      3
7     7    2    1      4
8     8    3    2      5
9     9    4    1      6
10   10    5    2      7

我需要获得 3 个变量的独特组合及其每个时期的总和

,即。请

  var1var2var3   var1var3var4   var1var5var18  etc...
1     6               sum
2     6           
3     7          
4     10           
5     11           
6     9         
7     10             
8     13          
9     14          
10    17         

注意 var1var3var5 与 var3var1var5 相同

here is my simplified data set:

foo <- data.frame(var1= c(1:10), var2=rep(1:5,2),var3=rep(1:2,5),var4=rep(3:7,2) )    

all together 20 variables

foo

   var1 var2 var3   var4    ... var20
1     1    1    1      3
2     2    2    2      4
3     3    3    1      5
4     4    4    2      6
5     5    5    1      7
6     6    1    2      3
7     7    2    1      4
8     8    3    2      5
9     9    4    1      6
10   10    5    2      7

I need to get a unique combination of 3 variables and its sum for each period

ie. sth like

  var1var2var3   var1var3var4   var1var5var18  etc...
1     6               sum
2     6           
3     7          
4     10           
5     11           
6     9         
7     10             
8     13          
9     14          
10    17         

note that var1var3var5 is the same as var3var1var5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯角 2024-10-25 09:11:53

正如 @Chase 所建议的,combn 可以满足您的需求:

nams <- apply( combn(colnames(foo),3), 2, function(z) paste(z, collapse = ''))
cols <- combn( ncol(foo), 3)

tripleSums <- apply( cols, 2, function(z) rowSums(foo[,z]))
colnames(tripleSums) <- nams

> tripleSums
      var1var2var3 var1var2var4 var1var3var4 var2var3var4
 [1,]            3            5            5            5
 [2,]            6            8            8            8
 [3,]            7           11            9            9
 [4,]           10           14           12           12
 [5,]           11           17           13           13
 [6,]            9           10           11            6
 [7,]           10           13           12            7
 [8,]           13           16           15           10
 [9,]           14           19           16           11
[10,]           17           22           19           14

As @Chase suggested, combn gets you what you want:

nams <- apply( combn(colnames(foo),3), 2, function(z) paste(z, collapse = ''))
cols <- combn( ncol(foo), 3)

tripleSums <- apply( cols, 2, function(z) rowSums(foo[,z]))
colnames(tripleSums) <- nams

> tripleSums
      var1var2var3 var1var2var4 var1var3var4 var2var3var4
 [1,]            3            5            5            5
 [2,]            6            8            8            8
 [3,]            7           11            9            9
 [4,]           10           14           12           12
 [5,]           11           17           13           13
 [6,]            9           10           11            6
 [7,]           10           13           12            7
 [8,]           13           16           15           10
 [9,]           14           19           16           11
[10,]           17           22           19           14
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文