如何在数据框中组合多个观察结果以在列中创建列表?
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
创建一个列表来工作,所以任何帮助处理这些数据的帮助将不胜感激。
将 summarise
与 list
结合使用。
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 更改为意思,例如,如果您想要强制一个向量
我想使用 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
创建一个列表来工作,所以任何帮助处理这些数据的帮助将不胜感激。
将 summarise
与 list
结合使用。
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 更改为意思,例如,如果您想要强制一个向量