我正在估算缺少的变量。该功能最初似乎起作用:
True
输出:以前在NA点中具有“ None”的数据框。这是输出的一部分。
胡同BsmtQual BsmtCond BsmtExposure BsmtFinType1 BsmtFinSF1 BsmtFinType2
# Replace NA with "None"
vars_to_none = c("Alley", "BsmtQual", "BsmtCond", "BsmtExposure", "BsmtFinType1", "BsmtFinSF1", "BsmtFinType2", "FireplaceQu", "GarageType", "GarageYrBlt", "GarageFinish", "GarageQual", "GarageCond", "PoolQC", "Fence", "MiscFeature", "MasVnrType")
sapply(combi %>% select(vars_to_none), function(x) x = ifelse(is.na(x), "None", x))
到目前为止很好。
但是当我再次检查NA时...
[1,] "None" "Gd" "TA" "No" "GLQ" "706" "Unf"
[2,] "None" "Gd" "TA" "Gd" "ALQ" "978" "Unf"
[3,] "None" "Gd" "TA" "Mn" "GLQ" "486" "Unf"
[4,] "None" "TA" "Gd" "No" "ALQ" "216" "Unf"
...我得到2000多个条目。 head()显示相同的内容:
which(is.na(combi$Alley))
[1]不适用不适用不适用不适用
我尝试将sapply函数保存到combi,这导致了我不熟悉的错误。
head(combi$Alley)
combi $ Alley错误:$运算符对于原子向量无效
combi <- sapply(combi %>% select(vars_to_none), function(x) x = ifelse(is.na(x), "None", x))
head(combi$Alley)
combi $ Alley错误:$运算符对于原子向量无效
如何获取组合数据框以永久保存用“无”替换NA?
答案 0 :(得分:1)
您提供的代码的第一手工作并没有分配回combi
,因此combi
将不受这些计算的影响。
需要这样做:
combi[vars_to_non] <- sapply(combi %>% select(vars_to_none),
function(x) x = ifelse(is.na(x), "None", x))
我不会使用tidyverse-base混合代码,所以会回答:
combi[vars_to_non] <- lapply( combi[vars_to_non] ,
function(x) { x[is.na(x)] <- "None"; x}
我不确定结果是否会有所不同,但我怀疑我的版本会更有效,因为它不需要构建x列长度的多个向量。
第二个尝试失败了,因为sapply的默认值是一个矩阵,并且您将所有combi替换为您修改的列的矩阵化版本。 R中的矩阵只是具有维数的原子向量。
答案 1 :(得分:1)
以下内容会将NA
数据框中的所有"None"
替换为combi
字符串。
combi2 <- combi %>%
mutate_all(funs(str_replace_na(., 'None')))