'!'对于R中的因素没有意义

时间:2015-03-26 15:14:13

标签: r

我需要从数据框中排除变量“PABI”。所以,我按照以下方式进行了分类:

MyData4 <- subset(MyData, PROV=="PABI")
newdata <- MyData[!MyData4]

但是我收到了这个错误:

Error in FUN(left) : invalid argument type
In addition: Warning messages:
1: In Ops.factor(left) : ‘!’ not meaningful for factors
2: In Ops.factor(left) : ‘!’ not meaningful for factors
3: In Ops.factor(left) : ‘!’ not meaningful for factors
4: In Ops.factor(left) : ‘!’ not meaningful for factors
5: In Ops.factor(left) : ‘!’ not meaningful for factors
6: In Ops.factor(left) : ‘!’ not meaningful for factors
7: In Ops.factor(left) : ‘!’ not meaningful for factors
8: In Ops.factor(left) : ‘!’ not meaningful for factors

2 个答案:

答案 0 :(得分:3)

为什么不这样做:

newdata <- subset(MyData, PROV!="PABI")

答案 1 :(得分:1)

!仅适用于逻辑变量。但是,您的subset调用会返回data.frame,而不是逻辑;因此错误。实际上,您只需要在第一行中反转条件:

newdata <- subset(MyData, PROV != "PABI")

就是这样。

为了澄清逻辑值的工作原理,您还可以编写以下内容:

has_PABI <- MyData$PROV == "PABI"
newdata <- MyData[! has_PABI]

请注意,第二行现在与您的代码相同。更改的是,您作为否定索引的变量现在是一个逻辑向量,每行包含值TRUEFALSE,具体取决于该行的PROV列的值。 / p>