Select 只有多行参与者
Select only participants with multiple rows
ID
score
Time
1
1000000
1
2
1000000
1
2
1000000
2
3
1000000
1
3
1000000
2
4
1000000
1
5
1000000
1
5
1000000
2
如何将此数据库子集化为一个新的数据库,其中仅包含至少有 2 次跟进的 ID?
跟进类似于“时间”,而只有时间 1 的人有一个跟进,我想将他们从数据库中排除。
谢谢
我们可以使用基于 filter
方法的频率 'ID' 在按 'ID'
分组后有多个观测值
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(n() > 1) %>%
ungroup
或在 base R
中 - 还使用 subset
对检查 'ID' 且 Time
值大于 1
的行进行子集化
subset(df1, ID %in% ID[Time > 1])
数据
df1 <- structure(list(ID = c(1L, 2L, 2L, 3L, 3L, 4L, 5L, 5L), score = c(1000000L,
1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L
), Time = c(1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L)),
class = "data.frame", row.names = c(NA,
-8L))
这是另一个使用 dplyr
的选项,我们首先 count
每个 ID
的观察次数,然后 filter
只保留 ID
s 至少有 2 个观察值,然后删除计数列。
library(dplyr)
df %>%
add_count(ID, name = "obs") %>%
filter(obs > 1) %>%
select(-obs)
输出
ID score Time
1 2 1000000 1
2 2 1000000 2
3 3 1000000 1
4 3 1000000 2
5 5 1000000 1
6 5 1000000 2
或使用 data.table
的另一个选项:
library(data.table)
setDT(df)[,if(.N > 1) .SD, by=ID]
数据
df <- structure(list(ID = c(1L, 2L, 2L, 3L, 3L, 4L, 5L, 5L), score = c(1000000L,
1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L
), Time = c(1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-8L))
ID | score | Time |
---|---|---|
1 | 1000000 | 1 |
2 | 1000000 | 1 |
2 | 1000000 | 2 |
3 | 1000000 | 1 |
3 | 1000000 | 2 |
4 | 1000000 | 1 |
5 | 1000000 | 1 |
5 | 1000000 | 2 |
如何将此数据库子集化为一个新的数据库,其中仅包含至少有 2 次跟进的 ID? 跟进类似于“时间”,而只有时间 1 的人有一个跟进,我想将他们从数据库中排除。 谢谢
我们可以使用基于 filter
方法的频率 'ID' 在按 'ID'
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(n() > 1) %>%
ungroup
或在 base R
中 - 还使用 subset
对检查 'ID' 且 Time
值大于 1
subset(df1, ID %in% ID[Time > 1])
数据
df1 <- structure(list(ID = c(1L, 2L, 2L, 3L, 3L, 4L, 5L, 5L), score = c(1000000L,
1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L
), Time = c(1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L)),
class = "data.frame", row.names = c(NA,
-8L))
这是另一个使用 dplyr
的选项,我们首先 count
每个 ID
的观察次数,然后 filter
只保留 ID
s 至少有 2 个观察值,然后删除计数列。
library(dplyr)
df %>%
add_count(ID, name = "obs") %>%
filter(obs > 1) %>%
select(-obs)
输出
ID score Time
1 2 1000000 1
2 2 1000000 2
3 3 1000000 1
4 3 1000000 2
5 5 1000000 1
6 5 1000000 2
或使用 data.table
的另一个选项:
library(data.table)
setDT(df)[,if(.N > 1) .SD, by=ID]
数据
df <- structure(list(ID = c(1L, 2L, 2L, 3L, 3L, 4L, 5L, 5L), score = c(1000000L,
1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L, 1000000L
), Time = c(1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-8L))