如何在数据框中组合多个观察结果以在列中创建列表?

How do I combine multiple observations in a dataframe to create a list in a column?

我想使用 ggupset 包创建一个不正常的图,但我很难正确格式化我的数据。我的数据目前在类似于下面的小标题中。

> tibble
# A tibble: 13 × 3
   locus pathway fold_change
   <chr> <chr>         <dbl>
 1 0001  A               1  
 2 0001  B               1  
 3 0001  C               1  
 4 0001  D               1  
 5 0002  B              -2  
 6 0002  D              -2  
 7 0003  C               1  
 8 0004  C               3  
 9 0004  E               3  
10 0004  F               3  
11 0004  G               3  
12 0004  H               3  
13 0005  D               2.5  

ggupset 需要一种格式,其中 pathway 列需要格式化为每个 locus 观察的列表,如下面的假小标题所示(正确的格式也显示在 tidy_movies ggplot2 中的数据集)。

>fake_tibble
# A tibble: 5 x 3
    locus   pathways            fold_change
    <chr>   <list>              <dbl>
1   0001    "A" "B" "C" "D"     1
2   0002    "B" "D"             -2
3   0003    "C"                 1
4   0004    "C" "E" "F" "G" "H" 3
5   0005    "D"                 2.5

真实的数据集太大,我不想通过手动为每个 locus 创建一个列表来工作,所以任何帮助处理这些数据的帮助将不胜感激。

summariselist 结合使用。

df %>% 
  group_by(locus, fold_change) %>% 
  summarise(pathway = list(pathway))

  locus fold_change pathway  
  <int>       <dbl> <list>   
1     1         1   <chr [4]>
2     2        -2   <chr [2]>
3     3         1   <chr [1]>
4     4         3   <chr [5]>
5     5         2.5 <chr [1]>

数据

df <- structure(list(locus = c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 
4L, 4L, 4L, 5L), pathway = c("A", "B", "C", "D", "B", "D", "C", 
"C", "E", "F", "G", "H", "D"), fold_change = c(1, 1, 1, 1, -2, 
-2, 1, 3, 3, 3, 3, 3, 2.5)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
))
tibble("locus" = unique(df$locus),
       "pathway" = aggregate(df$pathway, list(df$locus), FUN = list)$x,
       "fold_change" = aggregate(df$fold_change, list(df$locus), FUN = unique, simplify = TRUE)$x)

如果您的 fold_change 是一个列表,则至少有一个位点必须具有不同的 fold_change 值。您可以将 FUN 更改为意思,例如,如果您想要强制一个向量