Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于id折叠dataframe,将变量的多个值存储到列表中_R_Dplyr - Fatal编程技术网

基于id折叠dataframe,将变量的多个值存储到列表中

基于id折叠dataframe,将变量的多个值存储到列表中,r,dplyr,R,Dplyr,在示例中,我有一个数据帧,其中有一个id变量fruit。对于其他一些变量,每个id变量只有一个对应值taste,ranking,而对于其他变量,则有多个color,origin 我希望折叠数据帧,使每个id变量都有一行。对于具有多个值的变量,我可以理想地将它们存储为列表 然而,我想不出一个办法来做到这一点。下面是我尝试对具有多个值的变量使用的summary和unique。然而,我刚刚得到了原始数据: df %>% group_by(fruit) %>% summarise(r

在示例中,我有一个数据帧,其中有一个id变量
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