删除数据集中的行是错误的

时间:2011-05-26 08:15:22

标签: r row data-manipulation

我有以下数据集:

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)),]

3 个答案:

答案 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)