基于id折叠dataframe,将变量的多个值存储到列表中
在示例中,我有一个数据帧,其中有一个id变量基于id折叠dataframe,将变量的多个值存储到列表中,r,dplyr,R,Dplyr,在示例中,我有一个数据帧,其中有一个id变量fruit。对于其他一些变量,每个id变量只有一个对应值taste,ranking,而对于其他变量,则有多个color,origin 我希望折叠数据帧,使每个id变量都有一行。对于具有多个值的变量,我可以理想地将它们存储为列表 然而,我想不出一个办法来做到这一点。下面是我尝试对具有多个值的变量使用的summary和unique。然而,我刚刚得到了原始数据: df %>% group_by(fruit) %>% summarise(r
fruit
。对于其他一些变量,每个id变量只有一个对应值taste
,ranking
,而对于其他变量,则有多个color
,origin
我希望折叠数据帧,使每个id变量都有一行。对于具有多个值的变量,我可以理想地将它们存储为列表
然而,我想不出一个办法来做到这一点。下面是我尝试对具有多个值的变量使用的summary
和unique
。然而,我刚刚得到了原始数据:
df %>%
group_by(fruit) %>%
summarise(ranking = mean(ranking),
taste = first(taste),
origin = unique(origin),
color = unique(color))
示例数据:
ranking <- c(1, 1, 2, 2, 3)
fruit <- c("apple", "apple", "pear", "pear", "banana")
color <- c("red", "green", "red", "green", "yellow")
taste <- c("good", "good", "good", "good", "okay")
origin <- c("WA", "CA", "OR", "MX", "PR")
df <- data.frame(fruit, ranking, color, taste, origin)
排名我们可以使用汇总
和交叉
,按感兴趣的列进行分组后,将唯一的
元素存储在列表
中
library(dplyr)
out <- df %>%
group_by(fruit, ranking, taste) %>%
summarise(across(c(color, origin), ~ list(unique(.))), .groups = 'drop')
或者使用base R
aggregate(. ~ fruit + ranking + taste, unique(df), FUN = c)
-输出
out
# A tibble: 3 x 5
fruit ranking taste color origin
<chr> <dbl> <chr> <list> <list>
1 apple 1 good <chr [2]> <chr [2]>
2 banana 3 okay <chr [1]> <chr [1]>
3 pear 2 good <chr [2]> <chr [2]>
fruit ranking taste color origin
1 apple 1 good red, green WA, CA
2 pear 2 good red, green OR, MX
3 banana 3 okay yellow PR
我们还可以使用以下解决方案:
library(dplyr)
library(purrr)
df %>%
group_split(fruit) %>%
map_dfr(~ .x %>% map_at(c("color", "origin"), ~ paste(.x, collapse = "-"))) %>%
distinct() %>%
arrange(ranking)
# A tibble: 3 x 5
fruit ranking color taste origin
<chr> <dbl> <chr> <chr> <chr>
1 apple 1 red-green good WA-CA
2 pear 2 red-green good OR-MX
3 banana 3 yellow okay PR
库(dplyr)
图书馆(purrr)
df%>%
分组(水果)%>%
映射dfr(~.x%>%map_位于(c(“颜色”、“原点”),~paste(.x,collapse=“-”))%%>%
不同的()%>%
安排(排名)
#一个tibble:3x5
水果的色、味起源
1个苹果1个红绿色好WA-CA
2个梨2个红绿色优质OR-MX
3根香蕉3根黄色好的
fruit ranking taste color origin
1 apple 1 good red, green WA, CA
2 pear 2 good red, green OR, MX
3 banana 3 okay yellow PR
library(dplyr)
library(purrr)
df %>%
group_split(fruit) %>%
map_dfr(~ .x %>% map_at(c("color", "origin"), ~ paste(.x, collapse = "-"))) %>%
distinct() %>%
arrange(ranking)
# A tibble: 3 x 5
fruit ranking color taste origin
<chr> <dbl> <chr> <chr> <chr>
1 apple 1 red-green good WA-CA
2 pear 2 red-green good OR-MX
3 banana 3 yellow okay PR