我有以下数据集:
text <- c(1:13)
numbers <- c(1,1,1,1,1,1,1,1,1,1,1,1,1)
test <- data.frame(
text =text,
is.numeric.feature = numbers)
text is.numeric.feature
1 1 1
2 2 1
...
13 13 1
现在我要删除数字特征== 0的所有行(此处没有,但在其他数据集中) 当我使用以下命令时,我的完整数据集为空,我做错了什么?
test[-c(which(test$is.numeric.feature==0)),]
答案 0 :(得分:3)
原因是当没有零时which(data$is.numeric.feature==0)
会返回integer(0)
。
> Data[-integer(0),]
[1] text is.numeric.feature
<0 rows> (or 0-length row.names)
为了克服这个问题,可以更好地使用逻辑向量:
Data[Data$is.numeric.feature!=0,]
在旁注中,你的oneliner中的c()
是多余的。 which
无论如何都会返回一个向量。并且,请永远不要给您的数据框或向量一个名称,也就是函数的名称。你会遇到麻烦。
答案 1 :(得分:2)
这是另一种方法。
data[!data$is.numeric.feature == 0, ]
答案 2 :(得分:0)
它出错了,因为which
语句返回一个空整数向量的整数(0)。索引-numeric(0)
不会被解释为“不要省略任何内容”,而是将其编号为integer(0)
,这意味着“无索引”。如果您的数据中至少有一个零,我认为它应该是正确的。
但是你无论如何都不需要它,逻辑矢量也没问题。这些都有效:
data[data$is.numeric.feature!=0,]
subset(data,is.numeric.feature!=0)