gpt4 book ai didi

r - 通过平均向量展平嵌套列表

转载 作者:行者123 更新时间:2023-12-04 10:58:43 24 4
gpt4 key购买 nike

假设我有一个嵌套的向量列表。

lst1 <- list(`A`=c(a=1,b=1), `B`=c(a=1), `C`=c(b=1), `D`=c(a=1,b=1,c=1))
lst2 <- list(`A`=c(b=1), `B`=c(a=1,b=1), `C`=c(a=1,c=1), `D`=c(a=1,c=1))
lstX <- list(lst1, lst2)

如图所示,每个向量 A,B,C,D出现两次 a,b,c以不同的频率出现。

如何将列表展平的最有效方法是 a,b,cA,B,C,D 上求和或求平均值跨嵌套列表,如下所示。真正的列表有几十万个嵌套列表。
#summed
a b c
A 1 2 NA
B 2 1 NA
C 1 1 1
D 2 1 2

#averaged
a b c
A 0.5 1 NA
B 1 0.5 NA
C 0.5 0.5 0.5
D 1 0.5 1

最佳答案

这是一个简单的基本 R 解决方案(它将返回 0 而不是 NA s(不确定是否足够好)

temp <- unlist(lstX)
res <- data.frame(do.call(rbind, strsplit(names(temp), "\\.")), value = temp)

总和
xtabs(value ~ X1 + X2, res)
# X2
# X1 a b c
# A 1 2 0
# B 2 1 0
# C 1 1 1
# D 2 1 2

方法
xtabs(value ~ X1 + X2, res) / length(lstX)
# X2
# X1 a b c
# A 0.5 1.0 0.0
# B 1.0 0.5 0.0
# C 0.5 0.5 0.5
# D 1.0 0.5 1.0

或者,更灵活 data.table解决方案
library(data.table) #V1.9.6+
temp <- unlist(lstX)
res <- data.table(names(temp))[, tstrsplit(V1, "\\.")][, value := temp]

总和
dcast(res, V1 ~ V2, sum, value.var = "value", fill = NA)
# V1 a b c
# 1: A 1 2 NA
# 2: B 2 1 NA
# 3: C 1 1 1
# 4: D 2 1 2

方法
dcast(res, V1 ~ V2, function(x) sum(x)/length(lstX), value.var = "value", fill = NA)
# V1 a b c
# 1: A 0.5 1.0 NA
# 2: B 1.0 0.5 NA
# 3: C 0.5 0.5 0.5
# 4: D 1.0 0.5 1.0

通常,您几乎可以使用 dcast 使用任何函数。

关于r - 通过平均向量展平嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893611/

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