您如何检查 data2$Site 是否采用 c("1", "2", "4") 值之一?
绝对不是data2$Site == c("1", "2", "4"),你应该使用 %in%:
data2$Site %in% c("1", "2", "4")
让我们研究一个可重现的例子:
data(iris)
这个众所周知的数据集有一个名为 Species 的列,它采用 3 个值:virginica、setosa 和 versicolor。这是完整的专栏:
> iris$Species
[1] setosa setosa setosa setosa setosa setosa setosa setosa setosa
[10] setosa setosa setosa setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa setosa setosa setosa
[28] setosa setosa setosa setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa setosa setosa setosa
[46] setosa setosa setosa setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[64] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[82] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[100] versicolor virginica virginica virginica virginica virginica virginica virginica virginica
[109] virginica virginica virginica virginica virginica virginica virginica virginica virginica
[118] virginica virginica virginica virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica virginica virginica virginica
[136] virginica virginica virginica virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
当我检查我的物种是 setosa 还是 virginica 时,前 50 个应该返回 YES,第二个 50 应该返回 NO,最后 50 个返回 YES。让我们看看当我们检查错误的方式时会发生什么:
> iris$Species == c('virginica','setosa')
[1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[18] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[35] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[52] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[69] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[86] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[103] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[120] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[137] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
前 50 条记录和最后 50 条记录交替返回 TRUE-FALSE。让我们做正确的事:
> iris$Species %in% c('virginica','setosa')
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[35] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[52] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[69] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[86] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[103] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[120] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[137] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
所以这是第一个项目。第二项是,您正在执行以下操作:
data2$Environment<-as.factor(data2$Environment<-ifelse(blabla))
这甚至可能很危险,但不要对此发表评论,我从未做过这样的嵌套赋值。我的评论是:为什么不只是data2$Environment<-as.factor(ifelse(blabla))?除此之外,您的嵌套 ifelse 以处理 3 个条件是正确的。只是为了比较,在我的示例中,等效为:
> ifelse(iris$Species %in% c('virginica'),'vi', ifelse(iris$Species %in% c('setosa'),'se', 've'))
[1] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se"
[21] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se"
[41] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve"
[61] "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve"
[81] "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve"
[101] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi"
[121] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi"
[141] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi"
因此,如果您只是将双精度值更改为 %in%'s,您应该会很好。