如何根据另一列中的值删除列中的元素

时间:2015-11-17 14:44:41

标签: r filter

我有一个有三列的DF,一个有农场,另一个有动物ID,第三个有天。

实施例

FOO
每只母牛都有许多动物,每只动物相对于第0天的日子在-60到30之间。但并非所有的动物都在序列中的所有日子。我想删除那些没有第0天(零)的动物。

OBS:农场可以拥有相同数量的动物。然后动物X可以存在于不同的农场

期望的输出:

Farm  ID  DAYS
A     1   -3
A     1   -2
A     1   -1
A     1    0
B     2   -18
B     2   -17
B     2    1
B     2    2
C     3   -10
C     3   -8
C     3    0
C     3    2
D     4   -20
D     4    2
D     4    7
D     4    8

请帮忙吗?对不起,如果我的解释不是很清楚。

2 个答案:

答案 0 :(得分:2)

或者使用基数R,您的data.frame被称为mydf

d6030[d6030$Farm %in% d6030$Farm[d6030$DAYS==0], ]
#   Farm ID DAYS
#1     A  1   -3
#2     A  1   -2
#3     A  1   -1
#4     A  1    0
#9     C  3  -10
#10    C  3   -8
#11    C  3    0
#12    C  3    2

注意: 或者,您可以d6030[with(d6030, Farm %in% Farm[DAYS==0]), ]获取相同的输出

答案 1 :(得分:1)

您可以使用dplyr。首先我们group_by ID,然后我们filter输出any没有0:

library(dplyr)
dat %>% group_by(ID) %>%
        filter(any(DAYS==0))
Source: local data frame [8 x 3]
Groups: ID [2]

    Farm    ID  DAYS
  (fctr) (int) (int)
1      A     1    -3
2      A     1    -2
3      A     1    -1
4      A     1     0
5      C     3   -10
6      C     3    -8
7      C     3     0
8      C     3     2