3

次のデータセットがあります。

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

3 に答える 3

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

ちなみに、ワンライナーのc()は冗長です。whichとにかくベクトルを返します。また、データフレームやベクターに関数の名前でもある名前を付けないでください。ある時点で問題が発生します。

于 2011-05-26T08:23:35.300 に答える
2

これを行う別の方法を次に示します。

data[!data$is.numeric.feature == 0, ]
于 2011-05-26T08:33:10.440 に答える
0

whichステートメントが空の整数ベクトルであるinteger(0)を返すため、問題が発生します。索引付け-numeric(0)は「何も省略しない」とは解釈されませんが、「何も索引付けinteger(0)しない」という意味の索引付けと解釈されます。データにゼロが少なくとも1つあれば、うまくいくはずです。

しかし、とにかくどちらも必要ありません。論理ベクトルは問題ありません。これらは両方とも機能します。

data[data$is.numeric.feature!=0,]

subset(data,is.numeric.feature!=0)
于 2011-05-26T08:24:31.613 に答える