簡體   English   中英

根據列值從列表中選擇數據框

[英]select dataframes from a list based on column values

這個問題是從先前的另一個問題改編而來的。

我使用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”列分類為“放牧者”或“象鼻蟲”。

首先,我想從14中隨機選擇6個分類單元,以實現6個所有可能的組合。因此,可以從14個中選擇3003個6個分類單元的組合(隨機抽樣而不進行替換,順序並不重要)。 對於每個選定的分類單元,我要包括該分類單元的所有樣本。 我使用此代碼,效果很好:

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中包括“ weevil”的所有數據框,並將這些數據框存儲在新清單。

因此,我希望這個新列表僅包含平衡為3:3 weevil:grazer Taxon的數據框,

非常感謝,M

我認為您正在尋找mysamples中所有具有3個象鼻蟲和3個放牧者的元素。 您可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM