gpt4 book ai didi

list - 改进我用于折叠 data.frames 列表的代码

转载 作者:行者123 更新时间:2023-12-04 06:49:34 25 4
gpt4 key购买 nike

亲爱的 StackOverFlowers(简称花),

我有一个 data.frames (walk.sample) 列表,我想将其折叠为单个(巨大的)data.frame。在折叠时,我想标记(添加另一列)哪些行来自列表的哪个元素。这是我到目前为止所得到的。

这是需要折叠/堆叠的data.frame。

> walk.sample
[[1]]
walker x y
1073 3 228.8756 -726.9198
1086 3 226.7393 -722.5561
1081 3 219.8005 -728.3990
1089 3 225.2239 -727.7422
1032 3 233.1753 -731.5526

[[2]]
walker x y
1008 3 205.9104 -775.7488
1022 3 208.3638 -723.8616
1072 3 233.8807 -718.0974
1064 3 217.0028 -689.7917
1026 3 234.1824 -723.7423

[[3]]
[1] 3

[[4]]
walker x y
546 2 629.9041 831.0852
524 2 627.8698 873.3774
578 2 572.3312 838.7587
513 2 633.0598 871.7559
538 2 636.3088 836.6325
1079 3 206.3683 -729.6257
1095 3 239.9884 -748.2637
1005 3 197.2960 -780.4704
1045 3 245.1900 -694.3566
1026 3 234.1824 -723.7423

我编写了一个函数来添加一个列,该列表示行来自哪个元素,然后将其附加到现有的 data.frame。
collapseToDataFrame <- function(x) { # collapse list to a dataframe with a twist
walk.df <- data.frame()
for (i in 1:length(x)) {
n.rows <- nrow(x[[i]])
if (length(x[[i]])>1) {
temp.df <- cbind(x[[i]], rep(i, n.rows))
names(temp.df) <- c("walker", "x", "y", "session")
walk.df <- rbind(walk.df, temp.df)
} else {
cat("Empty list", "\n")
}
}
return(walk.df)
}


> collapseToDataFrame(walk.sample)
Empty list
Empty list
walker x y session
3 1 -604.5055 -123.18759 1
60 1 -562.0078 -61.24912 1
84 1 -594.4661 -57.20730 1
9 1 -604.2893 -110.09168 1
43 1 -632.2491 -54.52548 1
1028 3 240.3905 -724.67284 1
1040 3 232.5545 -681.61225 1
1073 3 228.8756 -726.91980 1
1091 3 209.0373 -740.96173 1
1036 3 248.7123 -694.47380 1

我很好奇这是否可以更优雅地完成,也许使用 do.call() 或其他一些更通用的函数?

最佳答案

我并不是说这是最优雅的方法,但我认为它是有效的

library(plyr)

ldply(sapply(1:length(walk.sample), function(i)
if (length(walk.sample[[i]]) > 1)
cbind(walk.sample[[i]],session=rep(i,nrow(walk.sample[[i]])))
),rbind)

编辑

应用马立克的贴切评论后
do.call(rbind,lapply(1:length(walk.sample), function(i)
if (length(walk.sample[[i]]) > 1)
cbind(walk.sample[[i]],session=i) ))

关于list - 改进我用于折叠 data.frames 列表的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743204/

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