展开数据框,将一列的值合并为列表以填充单个单元格[重复]

问题描述 投票:1回答:2

我在r中具有以下数据框:

Color      Value
Red            1
Red            3
Red            4
Red            7
Blue           2
Blue           5
Green          1
Green          2
Green          3

我想做的是将这些值组合成一个列表,我可以将其放入单个单元格中,以颜色为中心。也就是说,我想要一个看起来像这样的表:

  Color        Value
  Red      [1,3,4,7]
  Blue         [2,5]
  Green      [1,2,3]

我在使用for循环解决此问题方面取得了一些成功,但是我发现执行该过程花费了大量时间。 tidyverse中是否存在可以执行此转换的更快速的数据整理功能?我以为purrr软件包可能包含答案,但导航困难。

谢谢!

r dataframe purrr data-wrangling
2个回答
1
投票

我们可以使用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))

0
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.