乘以多列并为多个值找到每列的总和 [英] multiply multiple column and find sum of each column for multiple values

查看:24
本文介绍了乘以多列并为多个值找到每列的总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试乘以列并获取其名称.我有一个数据框:

I'm trying to multiply column and get its names. I have a data frame:

v1 v2 v3 v4 v5  
 0  1  1  1  1
 0  1  1  0  1
 1  0  1  1  0

我正在尝试将每一列与其他列相乘,例如:

I'm trying to multiplying each column with other, like:

v1v2 
v1v3
v1v4
v1v5

和v2v3v2v4v2v5

and v2v3 v2v4 v2v5

等等,和

v1v2v3 
v1v2v4
v1v2v5
v2v3v4
v2v3v5

4 组合和 5 组合...如果有 n 列则 n 组合.

4 combination and 5 combination...if there is n column then n combination.

我尝试在 while 循环中使用以下代码,但它不起作用:

I'm try to use following code in while loop, but it is not working:

i<-1 
while(i<=ncol(data)
{  
  results<-data.frame() 
  v<-i
  results<- t(apply(data,1,function(x) combn(x,v,prod))) 
  comb <- combn(colnames(data),v)
  colnames(results) <- apply(comb,v,function(x) paste(x[1],x[2],sep="*"))
  results <- colSums(results)
}

但它不起作用.

样品输出...

如果 n=3

v1v2  v1v3 v2v3
  0      0    1    
  0      0    1  
  0      1    0

和colsum

v1v2  v1v3 v2v3
   0     1    2

然后

v1v2=0
v1v3=1
v2v3=2

我正在尝试这个?

推荐答案

试试这个:

df <- read.table(text = "v1 v2 v3 v4 v5  
 0  1  1  1  1
 0  1  1  0  1
 1  0  1  1  0", skip = 1)

df

ll <- vector(mode = "list", length = ncol(df)-1)

ll <- lapply(2:ncol(df), function(ncols){
  tmp <- t(apply(df, 1, function(rows) combn(x = rows, m = ncols, prod)))
  if(ncols < ncol(df)){
  tmp <- colSums(tmp)
  }
  else{
    tmp <- sum(tmp)
  }
  names1 <- t(combn(x = colnames(df), m = ncols))
  names(tmp) <- apply(names1, 1, function(rows) paste0(rows, collapse = ""))
  ll[[ncols]] <- tmp
})

ll

# [[1]]
# V1V2 V1V3 V1V4 V1V5 V2V3 V2V4 V2V5 V3V4 V3V5 V4V5 
#    0    1    1    0    2    1    2    2    2    1 
# 
# [[2]]
# V1V2V3 V1V2V4 V1V2V5 V1V3V4 V1V3V5 V1V4V5 V2V3V4 V2V3V5 V2V4V5 V3V4V5 
#      0      0      0      1      0      0      1      2      1      1 
# 
# [[3]]
# V1V2V3V4 V1V2V3V5 V1V2V4V5 V1V3V4V5 V2V3V4V5 
#        0        0        0        0        1 
# 
# [[4]]
# V1V2V3V4V5 
#          0

编辑以下评论然后可以通过索引(子集)列表来访问不同列组合集的结果.例如.访问2个组合",选择列表的第一个元素,访问第三个组合",选择列表的第二个元素,依此类推

Edit following comment The results of the different set of column combinations can then be accessed by indexing (subsetting) the list. E.g. to access the "2 combinations", select the first element of the list, to access the "3rd combination", select the second element of the list, et c.

ll[[1]]
# V1V2 V1V3 V1V4 V1V5 V2V3 V2V4 V2V5 V3V4 V3V5 V4V5 
#    0    1    1    0    2    1    2    2    2    1

这篇关于乘以多列并为多个值找到每列的总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆