| ID | 分數 | 時間 |
|---|---|---|
| 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 的人有一次跟進,我想將他們從資料庫中排除。謝謝。
uj5u.com熱心網友回復:
我們可以使用基于“ID”方法的頻率,filter在按“ID”分組后具有多個觀察值
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(n() > 1) %>%
ungroup
或 in 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))
uj5u.com熱心網友回復:
這是另一個使用 的選項dplyr,我們首先count為每個 的觀察數ID,然后filter只保留ID至少有 2 個觀察的 s,然后洗掉計數列。
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482652.html
