如何在具有多个行和列的数据框中用1替换所有NA,NaN,0、0.00、0.000值?谢谢。
df示例:
a = c(233, 0, NA, 3455)
b = c(23, 0.000, NA, 345)
c = c(223, 0.00, NaN, 30055)
df = cbind.data.frame(a,b,c)
答案 0 :(得分:3)
我喜欢@zack推荐的dplyr::mutate_all()
。另一个选择是purrr::map_df()
。
scrub <- function( x ) {
x <- dplyr::if_else(dplyr::near(x, 0), 1, x)
x <- dplyr::coalesce(x, 1)
x
}
# Option 1 (These four lines are equivalent):
df %>% # This needs `library(magrittr)`
purrr::map_df(scrub)
purrr::map_df(df, scrub)
purrr::map_df(df, ~scrub(.))
purrr::map_df(df, function(x) scrub(x))
# Option 2, suggested by @zack in the comments:
dplyr::mutate_all(df, scrub)
这是purrr::map_df()
(即tibble
)的结果。 dplyr::mutate_all()
返回一个data.frame
。
# A tibble: 4 x 3
a b c
<dbl> <dbl> <dbl>
1 233 23 223
2 1 1 1
3 1 1 1
4 3455 345 30055