我有一张表格,其格式如下
time ID
1 4024
1 4024
1 4025
1 4016
2 4024
2 4025
2 4025
3 4024
3 4016
3 4016
我想计算每个时间点每个ID的频率。例如,我想根据上表生成下表
time 4024 4025 4016
1 2 1 1
2 1 2 0
3 1 0 2
似乎aggregate
函数可以提供帮助,但是如何在这种情况下使用它。感谢。
答案 0 :(得分:1)
我们可以使用table
as.data.frame.matrix(table(df1))
# 4016 4024 4025
#1 1 2 1
#2 0 1 2
#3 2 1 0
或使用dcast
data.table
library(data.table)
dcast(setDT(df1), time ~ID, length)
# time 4016 4024 4025
#1: 1 1 2 1
#2: 2 0 1 2
#3: 3 2 1 0
或spread
tidyr
library(dplyr)
library(tidyr)
df1 %>%
group_by(time, ID) %>%
summarise(Count = n()) %>%
spread(ID, Count, fill = 0)