如何在 R 中从嵌套列表中创建较小的数据框

How can I create smaller data frames out of a nested list in R

提问人:Bodobert 提问时间:11/17/2022 最后编辑:Andre WildbergBodobert 更新时间:11/17/2022 访问量:68

问:

我的列表有 12000 个条目。每个条目由 16 列和 8 行组成。 我想为每个条目创建一个数据框。我对 16 列中的 3 列(X、Y 和 Z 坐标)感兴趣

我已经试过了:

data_frame12000 <- as.data.frame(do.call(cbind, list_small_read_laz))

此函数和其他函数仅创建一个 big data.frame,其中包含每个条目的所有 16 列。

谁能帮我?

先谢谢你!

r 数据帧 嵌套列表

评论

1赞 thelatemail 11/17/2022
请提供清单前几个要素的可重复示例,以便测试可能的答案。
0赞 Chris 11/17/2022
您最初是如何获取这些激光雷达数据的?也就是说,在不令人满意的data_frame12000结果之前,您的过程可能还有其他值得一提的部分。
0赞 Shawn Hemelstrand 11/17/2022
问候!通常,在此处为问题提供最低限度的可重现数据集会很有帮助,以便人们可以解决您的问题(例如,而不是表格或屏幕截图)。一种方法是对正在使用的数据或数据子集使用该函数,然后将输出粘贴到您的问题中。您可以在此处找到如何使用它: youtu.be/3EID3P1oisgdput

答:

0赞 SAL 11/17/2022 #1

如果我是对的,你有一个包含 12000 个元素的列表,每个元素都包含一个具有 8r*16c 的数据帧。而且我认为所有列表元素的列名都是相同的。

首先从每个条目元素中选择 X、Y、Z 列:

library(tidyverse) 
# assumming your list name is 'list_small_read_laz'
reduced_column <- map(list_small_read_laz,~ select(.,X,Y,Z))

然后将所有条目合并到一个数据帧中:

df_reduced_column <- map_dfr(reduced_column, as.data.frame)

希望这就是你要找的。

评论

0赞 Bodobert 11/17/2022
非常感谢。这真的帮助了我。现在我正在挑战下一个问题:我想通过 box.counting: box_counting(reduced_column[[1]]) 这个工作正常,但我需要所有数据帧的平均值我尝试选择更多数据帧,但收到错误消息:mean(box_counting(reduced_column[[1:12062]])) ...您能告诉我如何选择一行数据帧吗?谢谢!:)
0赞 Bodobert 11/17/2022
还有一件事:是否有可能只选择 0.1 > Z 值?也许像 reduced_column <- map(list_small_read_laz,~ select(.,X,Y,Z > 0.1))
0赞 SAL 11/17/2022
你可以用'map'函数做同样的事情:boxcounter <- map(reduced_column, box_counting)
0赞 SAL 11/17/2022
并且仅保持 Z 值> 0.1 : Z_keep <- map(reducd_column, ~ filter(. , Z > 0.1))。希望它有所帮助。
0赞 Bodobert 11/17/2022
谢谢!否,我收到错误消息,因为某些数据框不包含任何值。没关系,但是要计算地图函数,我必须删除这些帧。是否有删除这些空数据框的功能?谢谢!!
0赞 SteveM 11/17/2022 #2

如果您有一个包含 12000 个数据帧的列表,则可以使用 .下面是一个使用 mtcars 的示例:lapply

cars1 <- mtcars
cars2 <- cars1
cars3 <- cars2
list1 <- list(cars1, cars2, cars3)

df_list <- lapply(list1, function(x) x[, c(2, 4, 6)]) # column numbers are used

final_df <- Reduce(rbind, df_list) # if you want all of the dataframes combined by rows