我猜这个话题可能已经提出来,这是一个非常简单的解决方案。但是我现在无法做到。 假设我有一个data.frame(称为“数据”),其中包含10个人(id),我在3个时间点收集观察结果(T)
> data <- data.frame(id = rep(c(1:10), 3),
T = gl(3, 10),
X = sample(1:30),
Y = sample(c("yes", "no"), 30, replace = TRUE),
Z = sample(1:40, 30),
Z2 = rnorm(30, mean = 5, sd = 0.5))
> head(data)
id T X Y Z Z2
1 1 1 10 yes 15 5.993605
2 2 1 18 no 22 6.096566
3 3 1 5 no 24 5.101393
4 4 1 15 yes 18 4.944108
5 5 1 23 no 34 4.634176
6 6 1 13 no 27 5.576015
我想通过仅选择对于三个时间点(变量T)中的每一个具有“是”(变量Y)的个体来创建该data.frame的子集(称为data2的新数据帧),表示对于T = 1且T = 2且T = 3,Y =“是”。
我知道使用“&amp;”可以实现组合条件符号,这可用于关联3个时间点的条件。但是,我的问题是为每个时间点编写每个条件:如何告诉R我想要在T =“1”时Y =“是”的主题?
非常感谢所有人。 祝你有美好的一天,
丹尼斯
答案 0 :(得分:2)
你可以这样做:
keep.ids <- tapply(data$Y, data$id, FUN = function(x)all(x == "yes"))
subset(data, keep.ids[factor(id)])
或使用plyr
包:
library(plyr)
ddply(data, "id", function(x) if(all(x$Y == "yes")) x else NULL)