使用下面的数据框并在R中工作,我想生成一个新数据框列表,其中每个数据框基于我的Taxon矢量的4个不同值的唯一组合。在下面的数据框中,我有10个不同的Taxon(许多有多个复制条目),我想一次选择4个Taxon,对于4的所有组合。我相信这些10个Taxon中应该有210个不同的4个Taxon组合(无需更换时采样,订单并不重要)。所以最终我想要一个包含210个数据帧的列表,每个数据帧包含4个Taxon的不同组合(每个Taxon的所有复制行)!
虽然选择基于Taxon向量,但我希望新数据框包含其他信息列。例如,如果选择“Aphididae.sp.3”,我希望新数据框中还列出了-25.92(C),1.69(N),sap(func.group),草食动物(trophic.group)并肩作战。
到目前为止,我使用“combn”函数使用“unique”命令生成4个taxon的所有组合,但是我无法获得包含在其中的所有其他信息列,并且它不会给出所有复制每个分类的条目!我会感激任何帮助!
我的代码:
combos<-combn(unique(df$Taxon),4)
DF:
Taxon C N func.group trophic.grp
1 Aphididae.sp.3 -25.92 1.69 sap herbivore
2 Aphididae.sp.3 -25.91 1.78 sap herbivore
3 Aphididae.sp.3 -26.05 1.74 sap herbivore
4 Cicadellidae.mixed.juvs -28.94 1.19 sap herbivore
5 Cicadellidae.mixed.juvs -29.25 2.24 sap herbivore
6 Cicadellidae.mixed.juvs -28.17 1.88 sap herbivore
7 Cicadellidae.mixed.juvs -28.29 1.94 sap herbivore
8 Cicadellidae.sp.1 -27.69 2.25 sap herbivore
9 Cicadellidae.sp.1 -27.67 2.41 sap herbivore
10 Cicadellidae.sp.1 -26.65 3.26 sap herbivore
11 Cicadellidae.sp.1 -28.30 3.20 sap herbivore
12 Cicadellidae.sp.1 -28.08 1.88 sap herbivore
13 Cicadellidae.sp.2 -26.59 2.89 sap herbivore
14 Cicadellidae.sp.3 -26.82 5.16 sap herbivore
15 Cicadellidae.sp.4 -26.54 3.46 sap herbivore
16 Cicadellidae.sp.4 -26.55 4.05 sap herbivore
17 Cicadellidae.sp.4 -27.20 3.14 sap herbivore
18 Cicadellidae.sp.4 -26.48 3.80 sap herbivore
19 Cicadellidae.sp.5 -27.54 4.17 sap herbivore
20 Cicadellidae.sp.5 -27.18 3.43 sap herbivore
21 Cicadellidae.sp.5 -27.46 4.03 sap herbivore
22 Cicadellidae.sp.6 -26.71 1.09 sap herbivore
23 Cicadellidae.sp.6 -26.33 1.56 sap herbivore
24 Cicadellidae.sp.6 -25.59 0.59 sap herbivore
25 Cicadellidae.sp.6 -25.07 0.84 sap herbivore
26 Cicadellidae.sp.6 -26.56 0.97 sap herbivore
27 Cicadellidae.sp.7 -25.84 1.08 sap herbivore
28 Cicadellidae.sp.7 -24.96 1.36 sap herbivore
29 Cicadellidae.sp.7 -26.15 1.90 sap herbivore
30 Cicadellidae.sp.7 -26.58 2.63 sap herbivore
31 Cicadellidae.sp.8 -28.02 2.28 sap herbivore
32 Cicadellidae.sp.8 -27.90 2.01 sap herbivore
33 Cicadellidae.sp.8 -27.70 1.92 sap herbivore
34 Cicadellidae.sp.8 -26.85 1.04 sap herbivore
答案 0 :(得分:2)
combos
应为4 x 210矩阵的字符向量。如果您使用以下代码而不是原始代码:
combos<-combn(unique(as.character(df$Taxon)), 4) # factors would be converted
您应该能够将这些向量传递给具有apply
的子集化函数:
combdf <- apply(combos, 2, function(vec) df[ df$Taxon %in% vec, ] )
在测试期间,我发现原始矩阵搞砸了,因为我已经将Taxons作为因子,因此需要在as.character
之前进行unique
调用。在尝试apply
电话之前我没有看到这个,因为我收到了210件物品,但大多数都是空的。
答案 1 :(得分:1)
lapply(ncol(combos), function(x) df[df$Taxon %in% combos[,x],])