提问人:Bodobert 提问时间:11/17/2022 最后编辑:Andre WildbergBodobert 更新时间:11/17/2022 访问量:68
如何在 R 中从嵌套列表中创建较小的数据框
How can I create smaller data frames out of a nested list in R
问:
我的列表有 12000 个条目。每个条目由 16 列和 8 行组成。 我想为每个条目创建一个数据框。我对 16 列中的 3 列(X、Y 和 Z 坐标)感兴趣
我已经试过了:
data_frame12000 <- as.data.frame(do.call(cbind, list_small_read_laz))
此函数和其他函数仅创建一个 big data.frame,其中包含每个条目的所有 16 列。
谁能帮我?
先谢谢你!
答:
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
评论
dput