私は4年間にわたり2人の個人を繰り返し観察しています。 1年間の観測結果をすべてランダムに選択するにはどうすればよいですか?グループ化されたデータからランダムな観測グループ(行)を選択してください
set.seed(123)
dat <- data.frame(IndID = rep(c("AAA", "BBB"), each = 100),
Year = sample(c("2001", "2002", "2003", "2005"),200, replace = T),
Value = rnorm(200))
dat$Value[dat$IndID == "AAA" & dat$Year == "2002"] <- NA
dat$Value[dat$IndID == "BBB" & dat$Year == "2005"] <- NA
個々の年の組み合わせのサンプルサイズが異なることに注意してください。
table(dat$IndID, dat$Year)
2001 2002 2003 2005
AAA 26 27 20 27
BBB 20 30 30 20
また、すべての年にデータがあるわけではありません。
dat %>% group_by(IndID, Year) %>%
summarise(NoDat = sum(is.na(Value))) %>%
as.data.frame()
IndID Year NoDat
1 AAA 2001 0
2 AAA 2002 27
3 AAA 2003 0
4 AAA 2005 0
5 BBB 2001 0
6 BBB 2002 0
7 BBB 2003 0
8 BBB 2005 20
私はグループ内の特定の行を選択するための有用な例の数を見てきました(すなわち、トップ、最後の、Nなど、ランダム)が、グループ内のすべての行を選択する方法についてのドットを接続していないです。ここでは、無作為に選択された年のすべてのデータを各個人に、好ましくはdplyr
としたいと考えています。無作為な年は、データの有無に応じて異なる期間を与えられた各個人に固有でなければならない。無作為な年は、観察された1つの年である必要があり、それは個人によって異なる。
私は 'dplyr'の外で働くことを考えていませんでした。質問とデータセットに具体的な内容を追加しました。具体的には、「NA」を数年間追加しました。ランダムな年が各個人ごとに異なる必要があります。 –
slick。 2行目を 'filter(Year == sample(Year [!is.na(Value)]、1))'に変更して、 'NA'で年を除外することもできます。 –
ああ、そうです。良い点は、サンプルサイズが不均一なベクトルをサンプリングしているため、確率は等しくありません。これはこの例では問題ありませんが、コメントに感謝します。 –