我对两个人跨越四年重复观察。如何随机选择一年中的所有观察结果?
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
。随机年份应该针对每个人在具有和不具有数据的不同时期。随机年份需要是收集观察的一年,因人而异。
答案 0 :(得分:2)
我相信这就是你要找的东西:
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))
rand_year <- sample(dat$Year,1)
dat %>%
filter(Year == rand_year)
这是编辑后的版本,每个参与者都可以获得随机年份(注意年份可能相同):
result <- dat %>%
group_by(IndID) %>%
filter(Year == sample(Year, 1))
将filter()
行替换为filter(Year == sample(unique(Year[!is.na(Value)]), 1))
将使每年选择的概率相同,并排除评论中提到的缺失值。