R - 子条数据,如果条件

时间:2012-08-01 09:12:45

标签: r statistics

如何使用逻辑条件对数据进行子集化。

假设我有如下数据。我想在所有具有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

2 个答案:

答案 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.framesPen分割的列表。

答案 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), ]