-1

我带着一个问题回来了,我在一个例子上得到了答案,但在我的数据上没有。从下面提出的data.frame“数据”中,个人(id)测试了3次(T = 1、2或3),我想构建一个新的data.frame“data2”,其中包含价值为Y 变量在所有三个时间点都是“是”。

> 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=="1" 时 Y 为 "yes" 的行,然后对 T=="2" 和T==“3”。像那样 :

> data1y <- subset(data, T=="1"&Y=="yes")
   > data2y <- subset(data, T=="2"&Y=="yes")
    > data3y <- subset(data, T=="3"&Y=="yes")

那时,我必须从这 3 个 data.frame 中匹配“id”,并只保留在所有三个 data.frame 上匹配的那些,将它们放回新的 data.frame。有人可以帮我完成这最后一步吗?谢谢

4

1 回答 1

1

从您的样本数据中:

> data[data$T %in% c(1:3) & data$Y=='yes',]
   id T  X   Y  Z             Z2
1   1 1 20 yes 33 4.802216126170
5   5 1 11 yes 38 4.961652111819
6   6 1 16 yes 39 5.280062964072
8   8 1  9 yes 10 4.390774184018
10 10 1  2 yes 24 5.304658353230
11  1 2 28 yes 16 5.431195694915
12  2 2 10 yes 14 4.719670597678
13  3 2 27 yes  3 4.568885260296
14  4 2  4 yes 32 5.699626145087
15  5 2 19 yes 21 5.378941823200
17  7 2  5 yes 34 5.144265923191
18  8 2  1 yes  8 5.138866423019
19  9 2 29 yes 35 5.938777921967
20 10 2 18 yes 30 5.562200417288
24  4 3  6 yes 23 4.723790836659
26  6 3 25 yes 29 5.915660736770
28  8 3  8 yes 19 5.133772600848

如果这对您没有排序,请发表评论...

于 2013-06-02T18:14:27.120 回答