在按物种(列)矩阵的样本(行)中,包含子集(由列处理分配):
data <- structure(list(S1 = c(0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L), S2 = c(0L,
0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L), S3 = c(0L, 1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), Treatment = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor")), .Names = c("S1",
"S2", "S3", "Treatment"), class = "data.frame", row.names = c(NA,
9L))
我想确定那些仅在特定治疗中出现的物种。
这可能吗?非常感谢你!
/编辑:
我想知道i)每种处理的独特物种的数量和ii)想要创建包含每种处理独特的物种名称的载体。
答案 0 :(得分:3)
对于我将使用的每种处理独特的物种名称(虽然它可能可能已经优化)
sapply(data[-4L], function(x) {
temp <- data[x == 1L, 4L]
if(length(unique(temp)) == 1) as.character(unique(temp)) else ""
})
# S1 S2 S3
# "" "B" "A"
对于每次治疗的独特物种数量,这是一个矢量化选项
rowSums(!!rowsum(data[-4L], data[, 4L]))
# A B C
# 2 2 1
答案 1 :(得分:2)
library(dplyr)
data %>%
group_by(Treatment) %>%
summarise(S1 = any(S1 == 1),
S2 = any(S2 == 1),
S3 = any(S3 == 1))
每个处理一行,每个物种一列。 TRUE
表示在该治疗中发现了该物种。