透视,分组或汇总数据框架

时间:2016-05-18 13:31:24

标签: r aggregate frequency

尝试过变换数据表但找不到办法。

我有一个数据框,如:

id letter
 1    a
 2    b
 3    c
 4    c
 5    a
 6    c

我想将其转换为:

id    letter frequency(id)
 1,5     a     2
 2       b     1
 3,4,6   c     3

我查看了cast()table()以及aggregate(),但没有想出来。

如果有两种不同的获取方式,我不需要它作为一个数据框开始:

 id    letter
 1,5     a
 2       b
 3,4,6   c

&安培;

letter frequency(id)
 a     2
 b     1
 c     3

没关系。我可以结合它们。感谢

2 个答案:

答案 0 :(得分:3)

解决此类问题的一种方法是使用dplyr,如下所示:

library(dplyr)
df <- read.table(text = 'id letter
1    a
2    b
3    c
4    c
5    a
6    c', header = TRUE, stringsAsFactors = FALSE)
df
df %>% group_by(letter) %>% summarise(freq = n(), idlist = paste(id, collapse = ','))

输出如下(尽管您可以根据需要重新排列列):

Source: local data frame [3 x 3]

  letter  freq idlist
   <chr> <int>  <chr>
1      a     2    1,5
2      b     1      2
3      c     3  3,4,6

答案 1 :(得分:3)

以下是data.table版本,

setDT(df)[, .(id = paste(id, collapse = ',')), letter]
#   letter    id
#1:      a   1,5
#2:      b     2
#3:      c 3,4,6

setDT(df)[, .(freq = .N), letter]
#   letter freq
#1:      a    2
#2:      b    1
#3:      c    3

或2合1

setDT(df)[, .(id = paste(id, collapse = ','), freq = .N), letter]
#   letter    id freq
#1:      a   1,5    2
#2:      b     2    1
#3:      c 3,4,6    3