繁体   English   中英

将嵌套小标题中的NA设置为零

[英]set NA to zero in a nested tibble

我想将嵌套小标题的所有NA设置为0

library(tidyverse)
df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, rep(NA,10), 10:20))

replace_na在部分replace_na效果很好:

df %>% replace_na(list(x = 0, y = "0", z="doesnotwork")) -> df1

df1$x给我:

[1] 1 2 0

但是,在df1$z NA仍然:

[[1]]  [1] 1 2 3 4 5
[[2]]  [1] NA NA NA NA NA NA NA NA NA NA
[[3]]  [1] 10 11 12 13 14 15 16 17 18 19 20

df$z是一个列表列,因此您需要使用purrr函数将replace_na应用于列表的每个元素。 在这里,我们可以使用mapdf$z每个向量应用replace_na ,将所有NA替换为0 上面的语法将用"doesnotwork"替换丢失的列表元素 (用NULL标记),而不丢失列表元素的值。

library(tidyverse)
df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, rep(NA,10), 10:20))

df1 <- df %>%
  replace_na(list(x = 0, y = "0")) %>%
  mutate(z = map(z, replace_na, 0))
df1$z
#> [[1]]
#> [1] 1 2 3 4 5
#> 
#> [[2]]
#>  [1] 0 0 0 0 0 0 0 0 0 0
#> 
#> [[3]]
#>  [1] 10 11 12 13 14 15 16 17 18 19 20

reprex软件包 (v0.2.0)创建于2018-05-08。

这也可以通过从base R进行的rapply (递归应用)来完成

df[] <- rapply(df, function(x) replace(x, is.na(x),  0), how = 'list')
str(df)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  3 obs. of  3 #variables:
# $ x: num  1 2 0
# $ y: chr  "a" "0" "b"
# $ z:List of 3
#  ..$ : num  1 2 3 4 5
#  ..$ : num  0 0 0 0 0 0 0 0 0 0
#  ..$ : num  10 11 12 13 14 15 16 17 18 19 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM