1

RI には、欠損値のあるデータ フレームがあるため、read.table()関数はNA空白セルの代わりに s を使用します。

私はこれを書きました:

a <- sample(1000:50000000, size=120, replace=TRUE)
values <- matrix(a, nrow=6, ncol=20)
mtx <- cbind.data.frame(values, c(rep(NA),6))
mtx <- apply(mtx, 2, function(x){
    if (x==NA) sample(100:500, replace=TRUE, size=nrow(mtx)) else (x)})

しかし、私はこのエラーがあります:

Error in if (x == NA) sample(100:500, replace = TRUE, size = nrow(mtx)) else (x) : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In if (x == NA) sample(100:500, replace = TRUE, size = nrow(mtx)) else (x) :
  the condition has length > 1 and only the first element will be used

何か案は?

ベスト リカルド

4

1 に答える 1

8

NA値が存在するか存在しないという理由だけで、比較演算子の使用をテストすることはできませんNAis.na()の形式で欠損を識別するための適切な関数ですNA

NAこれは、マトリックスでの置換の例ですvalues。ここで重要なのは、ベクトル化された方法で作業し、NA次にインデックスを使用してすべての要素NAを必要な値に置き換える要素を特定することです。

> set.seed(2)
> values <- matrix(sample(1000:50000000, size=120, replace=TRUE),
+                  nrow=6, ncol=20)
> ## add some NA to simulate
> values[sample(120, 20)] <- NA
> 
> ## how many NA
> (tot <- sum(is.na(values)))
[1] 20
> 
> ## replace the NA
> values[is.na(values)] <- sample(100:500, tot, replace=TRUE)
> 
> ## now how many NA
> (sum(is.na(values)))
[1] 0
于 2012-06-21T14:52:37.517 に答える