gpt4 book ai didi

使用 dplyr 将列表重新组织为数据框

转载 作者:行者123 更新时间:2023-12-04 10:39:14 27 4
gpt4 key购买 nike

我将使用 dplyr 包的速度在整洁的数据帧中转换结构化列表。
我会知道我现在发布的解决方案是“最先进的”还是更快的解决方案。

这是我的起始列表的示例:

l = list()
l[[1]] = list(member1=c(a=rnorm(1)),member2=matrix(rnorm(3),nrow=3,ncol=1,dimnames=list(c(letters[2:4]),c("sample"))))
l[[2]] = list(member1=c(a=rnorm(1)),member2=matrix(rnorm(3),nrow=3,ncol=1,dimnames=list(c(letters[2:4]),c("sample"))))
l[[3]] = list(member1=c(a=rnorm(1)),member2=matrix(rnorm(3),nrow=3,ncol=1,dimnames=list(c(letters[2:4]),c("sample"))))

有了这个结果(向您展示玩具结构):
l
[[1]]
[[1]]$member1
a
0.3340196

[[1]]$member2
sample
b 1.0098830
c 0.6413375
d 0.9080675

[[2]]
[[2]]$member1
a
0.0590878

[[2]]$member2
sample
b 0.5585736
c -0.5936157
d -0.3985687

[[3]]
[[3]]$member1
a
0.06242458

[[3]]$member2
sample
b -0.2873391
c 0.5326067
d -1.1635551

现在我将使用一个方便的函数来重新排列数据 lapply浏览列表:
organizeSamples = function(x){
member = x$member2
output = data.frame(key=rownames(member),value=member[,1])
return(output)
}
l_new = lapply(l, organizeSamples)

现在 dplyr 发挥了作用:
samples = dplyr::bind_rows(l_new)
samples :

key value
1 b 1.0098830
2 c 0.6413375
3 d 0.9080675
4 b 0.5585736
5 c -0.5936157
6 d -0.3985687
7 b -0.2873391
8 c 0.5326067
9 d -1.1635551

有没有一种方法可以使用 dplyr 更快、更优雅、更紧凑?

最佳答案

这是另一种具有更多 dplyr/tidyr 功能和管道的方法,但是我还没有针对问题中的原始方法测试其性能,它是否更优雅取决于个人喜好。

library(dplyr); library(tidyr)

lapply(l, `[[`, 2) %>%
data.frame %>%
add_rownames("key") %>%
gather(x, value, -key) %>%
select(-x)

# key value
#1 b -1.1476570
#2 c -0.2894616
#3 d -0.2992151
#4 b 0.2522234
#5 c -0.8919211
#6 d 0.4356833
#7 b -0.2242679
#8 c 0.3773956
#9 d 0.1333364

关于使用 dplyr 将列表重新组织为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265702/

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