gpt4 book ai didi

r - 使用 dplyr group_by : return a list of data frames 模拟 split()

转载 作者:行者123 更新时间:2023-12-02 05:56:24 24 4
gpt4 key购买 nike

我有一个大型数据集,在 R 中阻塞了 split()。我可以使用 dplyr group_by (无论如何,这是首选方式),但我无法将生成的 grouped_df 保留为数据帧列表,这是我的连续处理步骤所需的格式(我需要强制为 SpatialDataFrames 等)。

考虑一个示例数据集:

df = as.data.frame(cbind(c("a","a","b","b","c"),c(1,2,3,4,5), c(2,3,4,2,2)))
listDf = split(df,df$V1)

返回

$a
V1 V2 V3
1 a 1 2
2 a 2 3

$b
V1 V2 V3
3 b 3 4
4 b 4 2

$c
V1 V2 V3
5 c 5 2

我想用group_by(类似于group_by(df,V1))来模拟这一点,但这会返回一个,grouped_df。我知道 do 应该能够帮助我,但我不确定用法(另请参阅 link 进行讨论。)

请注意,通过用于建立该组的因素的名称来分割每个列表 - 这是一个理想的功能(最终,对于从 dfs 列表中提取这些名称的方法,值得称赞)。

最佳答案

dplyr 中的 group_split:

Dplyr 已实现group_split: https://dplyr.tidyverse.org/reference/group_split.html

它将数据帧按组拆分,返回数据帧列表。这些数据帧中的每一个都是由分割变量的类别定义的原始数据帧的子集。

例如。通过变量 Species 拆分数据集 iris,并计算每个子数据集的摘要:

> iris %>% 
+ group_split(Species) %>%
+ map(summary)
[[1]]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.300 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:4.800 1st Qu.:3.200 1st Qu.:1.400 1st Qu.:0.200 versicolor: 0
Median :5.000 Median :3.400 Median :1.500 Median :0.200 virginica : 0
Mean :5.006 Mean :3.428 Mean :1.462 Mean :0.246
3rd Qu.:5.200 3rd Qu.:3.675 3rd Qu.:1.575 3rd Qu.:0.300
Max. :5.800 Max. :4.400 Max. :1.900 Max. :0.600

[[2]]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.900 Min. :2.000 Min. :3.00 Min. :1.000 setosa : 0
1st Qu.:5.600 1st Qu.:2.525 1st Qu.:4.00 1st Qu.:1.200 versicolor:50
Median :5.900 Median :2.800 Median :4.35 Median :1.300 virginica : 0
Mean :5.936 Mean :2.770 Mean :4.26 Mean :1.326
3rd Qu.:6.300 3rd Qu.:3.000 3rd Qu.:4.60 3rd Qu.:1.500
Max. :7.000 Max. :3.400 Max. :5.10 Max. :1.800

[[3]]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.900 Min. :2.200 Min. :4.500 Min. :1.400 setosa : 0
1st Qu.:6.225 1st Qu.:2.800 1st Qu.:5.100 1st Qu.:1.800 versicolor: 0
Median :6.500 Median :3.000 Median :5.550 Median :2.000 virginica :50
Mean :6.588 Mean :2.974 Mean :5.552 Mean :2.026
3rd Qu.:6.900 3rd Qu.:3.175 3rd Qu.:5.875 3rd Qu.:2.300
Max. :7.900 Max. :3.800 Max. :6.900 Max. :2.500

它对于调试嵌套数据帧上的计算也非常有帮助,因为它是一种快速“查看”嵌套数据帧计算“内部”发生的情况的方法。

关于r - 使用 dplyr group_by : return a list of data frames 模拟 split(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775239/

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