使用 R 中多年的完整数据获取观察的描述性统计数据
Obtaining descriptive statistics of observations with years of complete data in R
我有以下面板数据集
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,只有两年信息的个体数是一个,而拥有三年可用信息的人数是 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
我们可以使用data.table
。将 'data.frame' 转换为 'data.table' (setDT(df1)
),按 'id' 分组,得到 'year' 的唯一数字的长度,按该列分组,得到数字行数 (.N
)
library(data.table)
setDT(df1)[, uniqueN(year), .(id)][, .N, V1]
# V1 N
#1: 1 1
#2: 2 1
#3: 3 2
在 base R 中使用 table
并且它是更快的表亲 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
我有以下面板数据集
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,只有两年信息的个体数是一个,而拥有三年可用信息的人数是 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
我们可以使用data.table
。将 'data.frame' 转换为 'data.table' (setDT(df1)
),按 'id' 分组,得到 'year' 的唯一数字的长度,按该列分组,得到数字行数 (.N
)
library(data.table)
setDT(df1)[, uniqueN(year), .(id)][, .N, V1]
# V1 N
#1: 1 1
#2: 2 1
#3: 3 2
在 base R 中使用 table
并且它是更快的表亲 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