我有一个有三列的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
请帮忙吗?对不起,如果我的解释不是很清楚。
答案 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