聚合每列数据框的所有唯一值

时间:2016-01-24 23:54:08

标签: r aggregate

我有一个大数据框(1616610行,255列),我需要根据键将每列的唯一值粘贴在一起。

例如:

expr("abc")

我需要的是聚合255列中每一列中的每个唯一值,并为每个唯一值返回带有逗号分隔符的新数据框。像这样:

> data = data.frame(a=c(1,1,1,2,2,3),
              b=c("apples", "oranges", "apples", "apples", "apples", "grapefruit"),
              c=c(12, 22, 22, 45, 67, 28), 
              d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"))
> data
  a          b  c         d
1 1     apples 12    Monday
2 1    oranges 22    Monday
3 1     apples 22    Monday
4 2     apples 45   Tuesday
5 2     apples 67 Wednesday
6 3 grapefruit 28   Tuesday

我尝试使用 a b c d 1 1 apples, oranges 12, 22 Monday 2 2 apples 45, 67 Tuesday, Wednesday 3 3 grapefruit 28 Thursday ,如下所示:

aggregate

但是对于这个大小的数据框,它太耗时(小时),而且我经常需要一起杀死这个过程。最重要的是,这将汇总所有值,而不仅仅是唯一值。有没有人有任何提示:

1)如何改善大数据集聚合的时间

2)然后获取每个字段的唯一值

顺便说一下,这是我关于SO的第一篇文章,感谢您的耐心等待。

2 个答案:

答案 0 :(得分:6)

从评论中移出:

library(data.table)

dt <- as.data.table(data)
dt[, lapply(.SD, function(x) toString(unique(x))), by = a]

,并提供:

   a               b      c                  d
1: 1 apples, oranges 12, 22             Monday
2: 2          apples 45, 67 Tuesday, Wednesday
3: 3      grapefruit     28            Tuesday

答案 1 :(得分:4)

您可以使用dplyr

执行以下操作
func_paste <- function(x) paste(unique(x), collapse = ', ')
data %>%
    group_by(a) %>%
    summarise_each(funs(func_paste))

##      a               b      c                  d
##  (dbl)           (chr)  (chr)              (chr)
##1     1 apples, oranges 12, 22             Monday
##2     2          apples 45, 67 Tuesday, Wednesday
##3     3      grapefruit     28            Tuesday