尝试过变换数据表但找不到办法。
我有一个数据框,如:
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
没关系。我可以结合它们。感谢
答案 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