R 对列值的组合求和

R 对列值的组合求和,r,for-loop,combinations,R,For Loop,Combinations,我有一个数据框,有两列,看起来像 richness<- data.frame ("replicate_id"=c("1", "9", "10"), "richness"= c(3, 2, 4)) 归根结底,我不关心replicate\u id,只希望得到的输出类似于: output<- data.frame ("n.replicates"=c("1", "1", "1", "2", "2", "2", "3"),

我有一个数据框,有两列,看起来像

richness<- data.frame ("replicate_id"=c("1", "9", "10"), 
                       "richness"= c(3, 2, 4))
归根结底,我不关心
replicate\u id
,只希望得到的输出类似于:

output<- data.frame ("n.replicates"=c("1", "1", "1", "2", "2", "2", "3"), 
                       "richness"= c(3, 2, 4, 5, 7, 6, 9))

output我们可以使用
lappy
并在
richness
的每一行上循环,然后一次创建
richness
的所有组合。然后,我们创建该组合的数据帧,然后将它们结合在一起

do.call("rbind", lapply(seq_along(richness$replicate_id), function(x) {
   temp = combn(richness$richness, x)
   data.frame(n.replicate = x, richness = colSums(temp))
 }))


#  n.replicate richness
#1           1        3
#2           1        2
#3           1        4
#4           2        5
#5           2        7
#6           2        6
#7           3        9
不带
do.call
参数的中间步骤返回

lapply(seq_along(richness$replicate_id), function(x) {
  temp = combn(richness$richness, x)
  data.frame(n.replicate = x, richness = colSums(temp))
 })

#   [[1]]
#  n.replicate richness
#1           1        3
#2           1        2
#3           1        4

#[[2]]
#  n.replicate richness
#1           2        5
#2           2        7
#3           2        6

#[[3]]
#  n.replicate richness
#1           3        9
do.call("rbind", lapply(seq_along(richness$replicate_id), function(x) {
   temp = combn(richness$richness, x)
   data.frame(n.replicate = x, richness = colSums(temp))
 }))


#  n.replicate richness
#1           1        3
#2           1        2
#3           1        4
#4           2        5
#5           2        7
#6           2        6
#7           3        9
lapply(seq_along(richness$replicate_id), function(x) {
  temp = combn(richness$richness, x)
  data.frame(n.replicate = x, richness = colSums(temp))
 })

#   [[1]]
#  n.replicate richness
#1           1        3
#2           1        2
#3           1        4

#[[2]]
#  n.replicate richness
#1           2        5
#2           2        7
#3           2        6

#[[3]]
#  n.replicate richness
#1           3        9