我有以下面板数据集
id year Value
1 1 50
2 1 55
2 2 40
3 1 48
3 2 54
3 3 24
4 2 24
4 3 57
4 4 30
我想获得有关观察资料的年数的描述性统计数据,例如:只有一年信息的人数为1,只有两年信息的人数为1 ,而有三年可用信息的人数是2。
答案 0 :(得分:2)
lapply(split(df$id, ave(df$year, df$id, FUN = length)), function(x) length(unique(x)))
#$`1`
#[1] 1
#$`2`
#[1] 1
#$`3`
#[1] 2
答案 1 :(得分:2)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(df1)
),按'id'分组,获取'year'的唯一编号长度,按该列分组,获取行数({ {1}})
.N
答案 2 :(得分:2)
在使用table
的基础R中,它是更快的堂兄tabulate
:
table(tabulate(dat$id))
1 2 3
1 1 2
或
table(table(dat$id))
转换为data.frame:
data.frame(table(tabulate(dat$id)))
Var1 Freq
1 1 1
2 2 1
3 3 2