根据列值从列表中选择数据帧

时间:2013-12-17 15:19:41

标签: r list

这个问题改编自以前的不同版本。

使用R,我试图通过仅在其中一列中存在特定值组合时从现有列表中选择数据帧来创建新的数据帧列表。让我解释一下工作正常的第一步。这是我在名为df:

的数据框中的原始数据
                              Taxon      C     N    func.group  trophic.grp
1  Chrysomelidae.Phylotreta.exclamationis -30.23  5.06     grazer   herbivore
2        Chrysomelidae.Neocrepidodera.sp. -27.29  5.55     grazer   herbivore
3        Chrysomelidae.Neocrepidodera.sp. -27.84  5.54     grazer   herbivore
4        Chrysomelidae.Neocrepidodera.sp. -27.69  4.59     grazer   herbivore
5              Mitidulidae.Meligethes.sp. -26.99  5.30     grazer   herbivore
6           Chrysomelidae.Phylotreta.sp.2 -28.50  2.40     grazer   herbivore
7           Chrysomelidae.Phylotreta.sp.2 -28.36  4.17     grazer   herbivore
8           Chrysomelidae.Phylotreta.sp.2 -29.50  3.15     grazer   herbivore
9           Chrysomelidae.Phylotreta.sp.2 -27.69  3.72     grazer   herbivore
10          Chrysomelidae.Phylotreta.sp.2 -28.22  3.26     grazer   herbivore
11                  Gastropoda.snail.sp.1 -26.21  3.54     grazer   herbivore
12                  Gastropoda.snail.sp.1 -27.59  2.61     grazer   herbivore
13                  Gastropoda.snail.sp.1 -25.10  2.66     grazer   herbivore
14                  Gastropoda.snail.sp.2 -26.49  2.55     grazer   herbivore
15                  Gastropoda.snail.sp.4 -27.46 -0.38     grazer   herbivore
16       Lepidoptera.Arctidae.Ermine.moth -28.51  2.44     grazer   herbivore
17       Curculionidae.Ischapterapion.sp. -29.06  2.19     weevil   herbivore
18       Curculionidae.Ischapterapion.sp. -29.27  1.60     weevil   herbivore
19       Curculionidae.Ischapterapion.sp. -29.94  2.08     weevil   herbivore
20       Curculionidae.Ischapterapion.sp. -29.71  2.16     weevil   herbivore
21            Curculionidae.Protapion.sp. -28.45  1.91     weevil   herbivore
22            Curculionidae.Protapion.sp. -25.99  0.55     weevil   herbivore
23            Curculionidae.Protapion.sp. -28.27  1.52     weevil   herbivore
24            Curculionidae.Protapion.sp. -28.01  1.74     weevil   herbivore
25            Curculionidae.Protapion.sp. -27.06  0.54     weevil   herbivore
26             Curculionidae.Hypera.meles -25.41  3.38     weevil   herbivore
27               Curculionidae.Sitona.sp. -27.05  2.01     weevil   herbivore
28               Curculionidae.Sitona.sp. -26.70  3.07     weevil   herbivore
29               Curculionidae.Sitona.sp. -27.64  2.13     weevil   herbivore
30               Curculionidae.Sitona.sp. -27.50  1.47     weevil   herbivore
31            Curculionidae.Phylobius.sp. -28.27  2.66     weevil   herbivore
32      Curculionidae.Hypera.nigrorostris -25.52  2.43     weevil   herbivore

此数据框(df)包含14个不同的“Taxon”,其中一些具有多个样本,因此总共有32个样本。每个分类群也被“func.group”列分类为“grazer”或“象鼻虫”。

首先,我想从我的14中随机选择6个分类,对于所有可能的6个组合。因此,有6个分类单元的3003种组合,可以从14个(随机抽样而无需替换,顺序不重要) )。对于所选的每个分类,我想要包括该分类的所有样本。我使用这个代码,效果很好:

combos<-combn(unique(as.character(df$Taxon)), 6) 

接下来我想要包含所有其他信息列,因此我使用这个额外的代码行,对于每个选择的Taxon,它会添加其他数据列,并且运行良好:

mysamples <- apply(combos, 2, function(vec) df[ df$Taxon %in% vec, ] )

那么我们就解决了我的问题。从“mysamples”(现在应该是3003个数据帧的列表)中,我想选择包含3个Taxon的所有数据帧,这些数据帧是“grazer”,3个Taxon是“象鼻虫”,并将这些数据帧存储在新名单。

因此,我希望这个新列表仅包含包含3:3象鼻虫余额的数据帧:grazer Taxon,

非常感谢,M

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找具有3个象鼻虫和3个grazer的mysamples的所有元素。你可以这样做:

# Get list of bool for whether to include
include.list <- lapply(mysamples, function(x) sum(x$func.group == "weevil") == 3 &
                                              sum(x$func.group == "grazer") == 3)

# Limit mysamples to the selected ones
mysamples <- mysamples[do.call(c, include.list)]