私は、年と舞台を個別に観測し、与えられた年の所与のステージの観測数を0から複数にすることができるデータセットを持っています:dplyrを使用して変数内のすべてのカテゴリを観測したフィルタ年数
df <- data.frame(year = c(2000, 2000, 2000, 2000, 2001, 2001,
2001, 2002, 2002, 2003, 2003, 2003),
stage = c("a", "a", "a", "b", "b", "b",
"b", "a", "b", "a", "a", "a"))
df
## year stage
## 1 2000 a
## 2 2000 a
## 3 2000 a
## 4 2000 b
## 5 2001 b
## 6 2001 b
## 7 2001 b
## 8 2002 a
## 9 2002 b
## 10 2003 a
## 11 2003 a
## 12 2003 a
私はステージaとb(この場合、2000年と2002年の両方)の観測がある年だけを選択するようにデータをフィルタリングします。私はdplyr
とtidyr
でこれを行うには、次の方法を考え出した:
library(dplyr)
library(tidyr)
yrs <- df %>%
group_by(year, stage) %>%
summarise(n = n()) %>%
spread(stage, -year) %>%
na.omit %>%
pull(year)
yrs
## [1] 2000 2002
filter(df, year %in% yrs)
## year stage
## 1 2000 a
## 2 2000 a
## 3 2000 a
## 4 2000 b
## 5 2002 a
## 6 2002 b
これは少し不格好ようで、非常に大規模なデータセットのためにうまくスケールアップしない場合があります。 tidyr::spread
を使わずにdplyr
を使用してこれらの年のサブセットを作成する簡単で簡単な方法はありますか?