展平数据框,将列的值组合到列表中以填充单个单元格
Flatten a data frame, combine the values of a column into lists to populate individual cells
我在 r 中有以下数据框:
Color Value
Red 1
Red 3
Red 4
Red 7
Blue 2
Blue 5
Green 1
Green 2
Green 3
我想做的是将这些值合并到一个列表中,我可以将其放入单个单元格中,以颜色为中心。也就是说,我想要一个看起来像这样的 table:
Color Value
Red [1,3,4,7]
Blue [2,5]
Green [1,2,3]
我用 for 循环解决了这个问题,但我发现执行它需要相当长的时间。 tidyverse 中是否有更快速的数据整理功能可以执行此转换?我认为 purrr 包可能包含答案,但导航有困难。
谢谢!
我们可以用aggregate
aggregate(Value ~ Color, df1, FUN = toString)
如果我们需要 list
aggregate(Value ~ Color, df1, FUN = list)
或 dplyr
library(dplyr)
df1 %>%
group_by(Color) %>%
summarise(Value = toString(Value))
或作为 list
df1 %>%
group_by(Color) %>%
summarise(Value = list(Value))
library('data.table')
setDT(df)[, .(Value = paste0("[", paste0( Value, collapse = ","), "]")), by = .(Color)]
# Color Value
# 1: Red [1,3,4,7]
# 2: Blue [2,5]
# 3: Green [1,2,3]
数据:
df <- read.table(text='Color Value
Red 1
Red 3
Red 4
Red 7
Blue 2
Blue 5
Green 1
Green 2
Green 3', header = TRUE, stringsAsFactors = FALSE)
我在 r 中有以下数据框:
Color Value
Red 1
Red 3
Red 4
Red 7
Blue 2
Blue 5
Green 1
Green 2
Green 3
我想做的是将这些值合并到一个列表中,我可以将其放入单个单元格中,以颜色为中心。也就是说,我想要一个看起来像这样的 table:
Color Value
Red [1,3,4,7]
Blue [2,5]
Green [1,2,3]
我用 for 循环解决了这个问题,但我发现执行它需要相当长的时间。 tidyverse 中是否有更快速的数据整理功能可以执行此转换?我认为 purrr 包可能包含答案,但导航有困难。
谢谢!
我们可以用aggregate
aggregate(Value ~ Color, df1, FUN = toString)
如果我们需要 list
aggregate(Value ~ Color, df1, FUN = list)
或 dplyr
library(dplyr)
df1 %>%
group_by(Color) %>%
summarise(Value = toString(Value))
或作为 list
df1 %>%
group_by(Color) %>%
summarise(Value = list(Value))
library('data.table')
setDT(df)[, .(Value = paste0("[", paste0( Value, collapse = ","), "]")), by = .(Color)]
# Color Value
# 1: Red [1,3,4,7]
# 2: Blue [2,5]
# 3: Green [1,2,3]
数据:
df <- read.table(text='Color Value
Red 1
Red 3
Red 4
Red 7
Blue 2
Blue 5
Green 1
Green 2
Green 3', header = TRUE, stringsAsFactors = FALSE)