【发布时间】:2016-10-04 15:26:04
【问题描述】:
我有一个按物种(列)数据框的样本(行)。另一个数据框中的一列将样本编码成组。我想选择所有组中的所有样本都具有非零值的所有列。
物种框架:
structure(list(Otu000132 = c(0L, 56L, 30L, 52L, 1L, 4L, 31L, 4L, 17L, 9L, 4L),
Otu000144 = c(191L, 14L, 58L, 137L, 127L, 222L, 26L, 175L, 133L, 107L, 43L),
Otu000146 = c(0L, 0L, 0L, 0L, 16L, 62L, 41L, 16L, 60L, 32L, 0L),
Otu000147 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L),
Otu000151 = c(2L, 9L, 4L, 1L, 0L, 4L, 4L, 2L, 3L, 0L, 0L),
Otu000162 = c(2L, 1L, 0L, 0L, 1L, 1L, 0L, 2L, 1L, 0L, 0L),
Otu000164 = c(2L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L),
Otu000174 = c(0L, 0L, 3L, 1L, 0L, 2L, 0L, 1L, 2L, 1L, 0L),
Otu000176 = c(1L, 9L, 0L, 1L, 2L, 5L, 3L, 3L, 8L, 2L, 2L),
Otu000186 = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L),
Otu000190 = c(1L, 1L, 1L, 0L, 0L, 5L, 1L, 2L, 7L, 0L, 0L)),
.Names = c("Otu000132", "Otu000144", "Otu000146", "Otu000147",
"Otu000151", "Otu000162", "Otu000164", "Otu000174",
"Otu000176", "Otu000186", "Otu000190"),
row.names = 30:40, class = "data.frame")
分组框架:
structure(c(30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3),
.Dim = c(11L, 2L))
想要的输出:
structure(list(Otu000132 = c(0L, 56L, 30L, 52L, 1L, 4L, 31L, 4L, 17L, 9L, 4L),
Otu000144 = c(191L, 14L, 58L, 137L, 127L, 222L, 26L, 175L, 133L, 107L, 43L),
Otu000151 = c(2L, 9L, 4L, 1L, 0L, 4L, 4L, 2L, 3L, 0L, 0L),
Otu000176 = c(1L, 9L, 0L, 1L, 2L, 5L, 3L, 3L, 8L, 2L, 2L),
Otu000190 = c(1L, 1L, 1L, 0L, 0L, 5L, 1L, 2L, 7L, 0L, 0L)),
.Names = c("Otu000132", "Otu000144", "Otu000151",
"Otu000176", "Otu000190"),
row.names = 30:40, class = "data.frame")
我觉得这应该是我可以用 dplyr select 做的事情,但我想不通。任何人有建议让我走上一条道路?
【问题讨论】:
-
不是很清楚。您将第三列作为“Otu000146”,其中有 4 个 0,即 30、31 和 32 为 0。该列是否应该包含在所需的输出中?否则
sp1[!Reduce(&,lapply(split(gp1[,1], gp1[,2]), function(x) {x1 <- sp1[match(x, row.names(sp1)),]; colSums(x1==0)>0}))]将提供所需的所有其他列。 -
我的错误,我认为它存在于所有第 2 组中,但事实并非如此
-
你能编辑你的帖子来改变预期的输出吗
标签: r dplyr data-management