识别部分数据帧中的唯一观测值(由因子定义)

时间:2015-07-27 15:10:41

标签: r

在按物种(列)矩阵的样本(行)中,包含子集(由列处理分配):

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)想要创建包含每种处理独特的物种名称的载体。

2 个答案:

答案 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表示在该治疗中发现了该物种。