问题描述
我正在尝试用简单的代码学习数据清理。
我的中心问题是:两个单方括号并排有什么用?
这里以 df
为例。
df <- data.frame(x = c(1:3,NA,NA),y = c(6:9,NA))
以下代码是将 NA 替换为 99 的众多方法之一。而且我认为这很简单。
messy <- function(df,impute){
for (i in 1:nrow(df)) {
df[i,][is.na(df[i,])] <- impute
}
return(df)
}
clean <- messy(df,99)
clean
非常感谢您的回答。
解决方法
这是一种非常复杂的替换 NA
的方法。您可以将功能减少到 -
messy <- function(df,impute){
df[is.na(df)] <- impute
df
}
clean <- messy(df,99)
clean
# x y
#1 1 6
#2 2 7
#3 3 8
#4 99 9
#5 99 99
您也可以使用 apply
系列函数,但此处不需要它们,因为 is.na
直接作用于数据帧。
这里有另外三种用 tidyverse 方法替换 NA 的方法:
library(tidyverse)
df <- data.frame(x = c(1:3,NA,NA),y = c(6:9,NA))
#purrr
map_df(df,~replace_na(.x,99))
#> # A tibble: 5 x 2
#> x y
#> <dbl> <dbl>
#> 1 1 6
#> 2 2 7
#> 3 3 8
#> 4 99 9
#> 5 99 99
#transmute/across
df %>% transmute(across(everything(),99)))
#> x y
#> 1 1 6
#> 2 2 7
#> 3 3 8
#> 4 99 9
#> 5 99 99
#transmute_if
df %>% transmute_if(is.numeric,99))
#> x y
#> 1 1 6
#> 2 2 7
#> 3 3 8
#> 4 99 9
#> 5 99 99
由 reprex package (v2.0.0) 于 2021 年 6 月 14 日创建