gpt4 book ai didi

r - 汇总列值的组合

转载 作者:行者123 更新时间:2023-12-01 13:21:08 25 4
gpt4 key购买 nike

我有一个包含两列的数据框

richness<- data.frame ("replicate_id"=c("1", "9", "10"), 
"richness"= c(3, 2, 4))

我试图得到一个结果,其中我拥有 replicate_id 的所有组合和 richness 的总和以及相关的复制所以

[1] - 3

[9] - 2

[10] - 4

[1+9] - 5

[1+10] - 7

[9+10] - 6

[1+9+10] - 9

最终,我不关心 replicate_id 并且只希望结果输出类似于:

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

我在一个嵌套的 for 循环中有这个,因为我有多天的相同数据。注意:这意味着复制 ID 的长度每天都在变化(在示例中我只有三个,但依赖的数量越来越多)。我似乎已经尝试了一百万件事。这就是我用来获取组合的方法:

library(gtools)
for (i in 1:length(richness$replicate_id)){
combs <- data.frame(combinations (length(richness$replicate_id), i, richness$replicate_id))}

但在那之后我尝试的一切都失败了,我尝试创建一个行值向量,然后在 replicate_id 是否在行值向量中时求和,但无济于事。

任何帮助将不胜感激,希望这是有道理的?除了遇到问题之外,我还在为如何表达问题而苦恼。

最佳答案

我们可以使用lapply 并遍历richness 的每一行,然后创建richness 的所有组合,取x一次。然后我们创建该组合的数据框,然后将它们rbind 在一起。

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

关于r - 汇总列值的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com