22

this oneに似た質問がありますが、私のデータセットは少し大きいです: UID として 1 列を含む 50 列と、 or のいずれTRUEかを運ぶ他の列、すべてをtoNAに変更したいのですが、明示的なループを使用したくありません。NAFALSE

plyrトリックを行うことができますか?ありがとう。

更新 #1

迅速な返信ありがとうございますが、私のデータセットが以下のような場合はどうなりますか?

df <- data.frame(
  id = c(rep(1:19),NA),
  x1 = sample(c(NA,TRUE), 20, replace = TRUE),
  x2 = sample(c(NA,TRUE), 20, replace = TRUE)
)

X1私は処理したいだけですX2が、どうすればこれを行うことができますか?

4

5 に答える 5

33

変数のサブセットを置換したい場合でも、is.na(*) <-次のようにトリックを使用できます。

df[c("x1", "x2")][is.na(df[c("x1", "x2")])] <- FALSE

IMO で一時変数を使用すると、ロジックが理解しやすくなります。

vars.to.replace <- c("x1", "x2")
df2 <- df[vars.to.replace]
df2[is.na(df2)] <- FALSE
df[vars.to.replace] <- df2
于 2011-09-02T04:46:58.933 に答える
14

tidyr::replace_na優れた機能。

df %>%
  replace_na(list(x1 = FALSE, x2 = FALSE))

これは非常に優れた迅速な修正です。唯一の秘訣は、変更したい列のリストを作成することです。

于 2016-09-19T13:55:08.200 に答える
9

このコードを試してください:

df <- data.frame(
  id = c(rep(1:19), NA),
  x1 = sample(c(NA, TRUE), 20, replace = TRUE),
  x2 = sample(c(NA, TRUE), 20, replace = TRUE)
)
replace(df, is.na(df), FALSE)

別のソリューションのために更新されました。

df2 <- df <- data.frame(
  id = c(rep(1:19), NA),
  x1 = sample(c(NA, TRUE), 20, replace = TRUE),
  x2 = sample(c(NA, TRUE), 20, replace = TRUE)
)
df2[names(df) == "id"] <- FALSE
df2[names(df) != "id"] <- TRUE
replace(df, is.na(df) & df2, FALSE)
于 2011-09-02T04:08:41.463 に答える
4

パッケージNAToUnknown内の関数を使用できますgdata

df[,c('x1', 'x2')] = gdata::NAToUnknown(df[,c('x1', 'x2')], unknown = 'FALSE')
于 2011-09-02T13:53:56.970 に答える