lok*_*art 18 r missing-data dataframe na imputation
我有类似的问题这一个,但我的数据集是有点大:50列与1列UID等栏目,无论是携带TRUE还是NA,我想改变一切NA到FALSE,但我不希望使用显式循环.
可以plyr做到的伎俩?谢谢.
感谢您的快速回复,但如果我的数据集如下所示:
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)
)
Run Code Online (Sandbox Code Playgroud)
我只想要X1和X2被处理,如何做到这一点?
Hon*_*Ooi 29
如果要替换变量子集,仍可以使用该is.na(*) <-技巧,如下所示:
df[c("x1", "x2")][is.na(df[c("x1", "x2")])] <- FALSE
Run Code Online (Sandbox Code Playgroud)
IMO使用临时变量使逻辑更容易遵循:
vars.to.replace <- c("x1", "x2")
df2 <- df[vars.to.replace]
df2[is.na(df2)] <- FALSE
df[vars.to.replace] <- df2
Run Code Online (Sandbox Code Playgroud)
试试这段代码:
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)
Run Code Online (Sandbox Code Playgroud)
更新了另一种解决方案.
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)
Run Code Online (Sandbox Code Playgroud)
tidyr::replace_na 功能卓越.
df %>%
replace_na(list(x1 = FALSE, x2 = FALSE))
Run Code Online (Sandbox Code Playgroud)
这是一个非常快速的解决方案.唯一的技巧是你要列出你想要改变的列.