流式数据处理中dplyr包的流畅性使我感到非常震惊.最近,我急于为每个组ID生成一个新的数据帧,并将这些小数据帧组合成一个最终的较大数据帧.玩具示例:
input.data.frame %>%
group_by(gid) %>%
{some operation to generate a new data frame for each group} ## FAILED!!!!
Run Code Online (Sandbox Code Playgroud)
在dplyr中,mutate向每个组添加新列并为每个组summarise生成摘要的功能都无法满足我的要求.(我错过了什么?)
或者,使用ddplyplyr包,之前的dplyr交互,我可以通过它
ddply(input.data.frame, .(gid), function(x) {
some operation to generate a new data frame for each group
}
Run Code Online (Sandbox Code Playgroud)
但是当我加载plyr包时,dplyr中的一些功能会被可用性掩盖.
我有一个观察dataframe结果118,总共有三列。现在,我想将此数据框分成每个观察two dataframes值59。我尝试了两种不同的方法,但没有一个返回我想要的结果。
我该如何使用dplyrin来做到这一点R?
示例数据框:
Code Count_2020 Count_2021
A 1 2
B 2 4
C 3 6
D 4 8
E 5 10
F 6 12
Run Code Online (Sandbox Code Playgroud)
期望的输出:
DF1
Code Count_2020 Count_2021
A 1 2
B 2 4
C 3 6
Run Code Online (Sandbox Code Playgroud)
DF2
Code Count_2020 Count_2021
D 4 8
E 5 10
F 6 12
Run Code Online (Sandbox Code Playgroud)
第一种方法
基于这个答案
library(tidyverse)
df= df %>% group_split(Code)
Run Code Online (Sandbox Code Playgroud)
现在,这将返回 的列表118,因此它是一个观察值列表118,其中每个观察值list都有 …
有几次,我需要将分组数据帧的两列转换为列表,其中分组列成为列表的名称,非分组列的值成为元素。
例如,给定starwars数据集,假设我们想按角色的家乡列出角色。
library(tidyverse)
starwars %>%
select(homeworld, name) %>%
group_by(homeworld)
#> # A tibble: 87 x 2
#> # Groups: homeworld [49]
#> homeworld name
#> <chr> <chr>
#> 1 Tatooine Luke Skywalker
#> 2 Tatooine C-3PO
#> 3 Naboo R2-D2
#> 4 Tatooine Darth Vader
#> 5 Alderaan Leia Organa
#> 6 Tatooine Owen Lars
#> 7 Tatooine Beru Whitesun lars
#> 8 Tatooine R5-D4
#> 9 Tatooine Biggs Darklighter
#> 10 Stewjon Obi-Wan Kenobi
#> # ... …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在保留原始组信息的同时使用group_split()or语法的方法summarise()。我已经看过一些以前的页面,例如此处和此处,使用这些方法,但它们不保留分组信息。有没有办法做到这一点?我当然可以加入数据,但希望避免使用这种方法。
> set.seed(22)\n> # Create fake data\n> flavor <- data.frame(\n+ temperature = sample(x = c(\'hot\',\'cold\'), size = 500, replace = TRUE),\n+ color = sample(c(\'red\',\'blue\',\'green\'), 500, TRUE),\n+ texture = sample(c(\'crumbly\', \'crispy\', \'wet\', \'soft\'), 500, TRUE),\n+ flavor = sample.int(n = 100, size = 500, replace = TRUE)\n+ )\n> \n> head(flavor, 10)\n temperature color texture flavor\n1 cold red soft 47\n2 hot red crumbly 2\n3 cold blue crispy 28\n4 cold blue soft 36\n5 cold blue …Run Code Online (Sandbox Code Playgroud)