使用 data.table 限制面板数据以删除主题
Constraint on panel data to remove subjects using data.table
我有一个面板数据集:
data <- data.table(ID = c(1,1,1,1,2,2,3,3,3),
year = c(1,2,3,4,1,2,1,2,3),
score1 = c(90,78,92,69,86,73,82,85,91))
> data
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 2 1 86
6: 2 2 73
7: 3 1 82
8: 3 2 85
9: 3 3 91
我想设置一个约束,使每个 ID
都应该有 至少 3 年 的观察。我尝试使用 data.table
包使用以下内容:
data[data$year >= 3, ]
然而,这忽略了 ID
的第 1 年和第 2 年的观察结果,这些观察结果至少有 3 年的观察结果。换句话说,我只想查看至少有 3 年观察结果的 ID,并且还包括第 1 年和第 2 年的观察结果。
因此预期的输出是:
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91
我们可以使用分组方法
library(dplyr)
data %>%
group_by(ID) %>%
filter(n_distinct(year) >= 3) %>%
ungroup
-输出
# A tibble: 7 x 3
ID year score1
<dbl> <dbl> <dbl>
1 1 1 90
2 1 2 78
3 1 3 92
4 1 4 69
5 3 1 82
6 3 2 85
7 3 3 91
或使用data.table
library(data.table)
data <- setDT(data)[data[, .I[uniqueN(year) >=3], by = ID]$V1]
-输出
data
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91
另一个data.table
选项
> data[, .SD[uniqueN(year) >= 3], ID]
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91
我有一个面板数据集:
data <- data.table(ID = c(1,1,1,1,2,2,3,3,3),
year = c(1,2,3,4,1,2,1,2,3),
score1 = c(90,78,92,69,86,73,82,85,91))
> data
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 2 1 86
6: 2 2 73
7: 3 1 82
8: 3 2 85
9: 3 3 91
我想设置一个约束,使每个 ID
都应该有 至少 3 年 的观察。我尝试使用 data.table
包使用以下内容:
data[data$year >= 3, ]
然而,这忽略了 ID
的第 1 年和第 2 年的观察结果,这些观察结果至少有 3 年的观察结果。换句话说,我只想查看至少有 3 年观察结果的 ID,并且还包括第 1 年和第 2 年的观察结果。
因此预期的输出是:
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91
我们可以使用分组方法
library(dplyr)
data %>%
group_by(ID) %>%
filter(n_distinct(year) >= 3) %>%
ungroup
-输出
# A tibble: 7 x 3
ID year score1
<dbl> <dbl> <dbl>
1 1 1 90
2 1 2 78
3 1 3 92
4 1 4 69
5 3 1 82
6 3 2 85
7 3 3 91
或使用data.table
library(data.table)
data <- setDT(data)[data[, .I[uniqueN(year) >=3], by = ID]$V1]
-输出
data
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91
另一个data.table
选项
> data[, .SD[uniqueN(year) >= 3], ID]
ID year score1
1: 1 1 90
2: 1 2 78
3: 1 3 92
4: 1 4 69
5: 3 1 82
6: 3 2 85
7: 3 3 91