一次将具有多个行和列的数据框中的所有0值替换为1

时间:2018-06-22 20:37:02

标签: r dataframe replace

如何在具有多个行和列的数据框中用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)

1 个答案:

答案 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