如何根据 R 中其他列的条件 filter/subset 数据 table?
How to filter/subset a data table based on condition on other columns in R?
我有一个数据集,类似例子:
Data <- data.table(Date=c("2020-01-02", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-04", "2020-01-04", "2020-01-04"), ID=c(1,2,1,1,1,1,2), Value=c(150,120,111,189,654,333,213))
输出:
Date ID Value
1: 2020-01-02 1 150
2: 2020-01-02 2 120
3: 2020-01-03 1 111
4: 2020-01-04 1 189
5: 2020-01-04 1 654
6: 2020-01-04 1 333
7: 2020-01-04 2 213
我想通过 Date
和 ID
过滤或子集 Data
。
例如,
如果在一天中,我对ID
的观察少于2次,那么去掉那一天的ID
和Value
。
2020-01-02
我只有一个 ID
1
,所以,这一行将被删除。
如果你能给我一些建议,我将不胜感激。
非常感谢
只需按日期和 ID 分组,统计观察值并在大于一个时进行过滤:
Data[, n:=.N, by = .(Date, ID)][n>1]
# Date ID Value n
# 1: 2020-01-04 1 189 3
# 2: 2020-01-04 1 654 3
# 3: 2020-01-04 1 333 3
使用dplyr
,你可以试试:
library(dplyr)
Data %>% group_by(ID, Date) %>% filter(n() >= 2) %>% ungroup()
输出:
# Date ID Value
# <chr> <dbl> <dbl>
# 1 2020-01-04 1 189
# 2 2020-01-04 1 654
# 3 2020-01-04 1 333
我有一个数据集,类似例子:
Data <- data.table(Date=c("2020-01-02", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-04", "2020-01-04", "2020-01-04"), ID=c(1,2,1,1,1,1,2), Value=c(150,120,111,189,654,333,213))
输出:
Date ID Value
1: 2020-01-02 1 150
2: 2020-01-02 2 120
3: 2020-01-03 1 111
4: 2020-01-04 1 189
5: 2020-01-04 1 654
6: 2020-01-04 1 333
7: 2020-01-04 2 213
我想通过 Date
和 ID
过滤或子集 Data
。
例如,
如果在一天中,我对ID
的观察少于2次,那么去掉那一天的ID
和Value
。
2020-01-02
我只有一个 ID
1
,所以,这一行将被删除。
如果你能给我一些建议,我将不胜感激。
非常感谢
只需按日期和 ID 分组,统计观察值并在大于一个时进行过滤:
Data[, n:=.N, by = .(Date, ID)][n>1]
# Date ID Value n
# 1: 2020-01-04 1 189 3
# 2: 2020-01-04 1 654 3
# 3: 2020-01-04 1 333 3
使用dplyr
,你可以试试:
library(dplyr)
Data %>% group_by(ID, Date) %>% filter(n() >= 2) %>% ungroup()
输出:
# Date ID Value
# <chr> <dbl> <dbl>
# 1 2020-01-04 1 189
# 2 2020-01-04 1 654
# 3 2020-01-04 1 333