如何使用逻辑条件对数据进行子集化。
假设我有如下数据。我想在所有具有FCR记录的动物的第一个条件下对数据集进行子集化,然后我想在新数据集中将所有动物与这些动物一起用于相同的笔。
animal Feed Litter Pen
1 0.2 5 3
2 NA 5 3
3 0.2 5 3
4 0.2 6 4
5 0.3 5 4
6 0.3 4 4
7 0.3 5 3
8 0.3 5 3
9 NA 5 5
10 NA 3 5
11 NA 3 3
12 NA 3 5
13 0.4 7 3
14 0.4 7 3
15 NA 7 5
答案 0 :(得分:2)
我假设“FCR记录”(在您的问题中)与“Feed”有关。然后,如果我正确理解了这个问题,你可以这样做:
split(df[complete.cases(df),], df[complete.cases(df), 4])
# $`3`
# animal Feed Litter Pen
# 1 1 0.2 5 3
# 3 3 0.2 5 3
# 7 7 0.3 5 3
# 8 8 0.3 5 3
# 13 13 0.4 7 3
# 14 14 0.4 7 3
#
# $`4`
# animal Feed Litter Pen
# 4 4 0.2 6 4
# 5 5 0.3 5 4
# 6 6 0.3 4 4
在上文中,complete.cases
删除了任何不完整的观察结果。如果您需要匹配特定变量的参数,则可以使用df[!is.na(df$Feed), ]
而不是complete.cases
。然后,split
创建data.frames
按Pen
分割的列表。
答案 1 :(得分:1)
# all animals with Feed data
df[!is.na(df$Feed), ]
# all animals from pens with at least one animal with feed data in the pen
df[ave(!is.na(df$Feed), df$Pen, FUN = any), ]