2012-08-01 51 views
1

如何将数据与逻辑条件分组。R - 子集数据,如果条件

假设我有如下数据。我希望将所有具有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

看看:'?subset' – johannes 2012-08-01 09:14:28

+1

什么是FCR记录? – A5C1D2H2I1M1N2O1R2T1 2012-08-01 09:19:23

回答

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创建一个由Pen分割的data.frames的列表。

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