在R(bis)中选择多个标准

时间:2013-06-02 18:10:45

标签: r

我回过头来问一个问题,我的答案正在研究一个例子,但不是我的数据。来自data.frame"数据"下面提出,个人(id)测试3次(T = 1,2或3),我想建立一个新的data.frame" data2"包含Y变量值为#34;是"在所有三个时间点。

> 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

我没有遵循一个好的主张,但并没有真正发挥作用,我想分别选择Y是&#34;是&#34;的行。当T ==&#34; 1&#34;时,然后对T ==&#34; 2&#34;做同样的事情。和T ==&#34; 3&#34;。像那样:

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

那时,我必须匹配&#34; id&#34;从这3个data.frames中只保留那些匹配所有三个data.frame的数据,将它们放回到新的data.frame中。 最后一步有人可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分: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

如果这不符合您的要求,请发表评论......