multiply multiple column and find sum of each column for multiple values

谁说胖子不能爱 提交于 2019-12-04 07:16:55

问题


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

and v2v3 v2v4 v2v5

etc, and

v1v2v3 
v1v2v4
v1v2v5
v2v3v4
v2v3v5

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

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)
}

but it is not working.

sample out put..

if n=3

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

and colsum

v1v2  v1v3 v2v3
   0     1    2

then

v1v2=0
v1v3=1
v2v3=2

this one is I'm trying?


回答1:


Try this:

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

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


来源:https://stackoverflow.com/questions/20290069/multiply-multiple-column-and-find-sum-of-each-column-for-multiple-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!