2

私はこれらのようないくつかのデータを持っています

var1   var2
10     NA
101    NA
NA     86
11     NA
NA     11
NA     61

1 つの変数が NA の場合、もう 1 つの変数は NA ではなく、その逆も同様です。

それらを単一の変数に結合するにはどうすればよいですか。

var3
10
101
86
11
11
61

ループで簡単にできますが、かなり遅いので、もっと簡単な方法を見つけたいです。NA の値に 0 を割り当ててから、変数を一緒に追加することを考えました...もっと良い方法はありますか?

4

2 に答える 2

6

さまざまな方法が存在します。1 つの方法を次に示します。

var3 <- ifelse(!is.na(var1),var1,var2)

ここであなたの例に取り組んでいます:

  var1 <- c(10,101,NA,11,NA,NA)
  var2 <- c(NA,NA,86,NA,11,61)

  var3 <- ifelse(!is.na(var1),var1,var2)

 > var3
 [1]  10 101  86  11  11  61

この方法は比較的一般的です。たとえば、次のような非数値データで機能します。

  var1 <- c("AB","WZ",NA,"MN",NA,NA)
  var2 <- c(NA,NA,"QT",NA,"MN","RS")

  var3 <- ifelse(!is.na(var1),var1,var2)

 > var3
 [1] "AB" "WZ" "QT" "MN" "MN" "RS"

その場合、置き換えNA0追加するという提案は機能しません。

于 2012-11-27T23:06:55.477 に答える
5

rowSumsna.rm = TRUEこれを行います。(これは本当にあなたが提案した解決策です...)

data.frame DFあなたのデータがあなたのコメントにあると仮定します

1 つの変数が NA の場合、もう 1 つの変数は NA ではなく、その逆も同様です。

本当です。

 DF$var3 <- rowSums(DF[, c('var1','var2')], na.rm = TRUE)
于 2012-11-27T23:09:00.653 に答える