如何在 tibble 中用 NA 替换 NULL 单元格?
How to replace NULL cell by NA in a tibble?
使用 tibble
,可以有包含列表的 NULL 单元格:
tibble(x = list(1L, NULL), y = 1:2)
这给了我们:
# A tibble: 2 x 2
x y
<list> <int>
1 <int [1]> 1
2 <NULL> 2
您可以使用 View()
进行探索
我们如何用 NA 替换 tibble 的所有 NULL 单元格?
预期输出为:
tibble(x = list(1L, NA), y = 1:2)
产生:
# A tibble: 2 x 2
x y
<list> <int>
1 <int [1]> 1
2 <lgl [1]> 2
但实际上是:
我试过了:
is.null(df)
但它的行为不像 is.na()
...
然后我来了:
map(df, function(l) map(l, function(e) if(is.null(e)) NA else e))
但我很难用它来创造新的乐趣:
do.call(as_tibble, map(df, function(l) map(l, function(e) if(is.null(e)) NA else e)))
这给了我一个错误:
Error: Columns 1 and 2 must be named.
Use .name_repair to specify repair.
Run `rlang::last_error()` to see where the error occurred.
实现您想要的结果的tidyverse
方法可能如下所示:
library(purrr)
library(tibble)
library(dplyr)
df <- tibble(x = list(1L, NULL), y = 1:2)
df %>%
mutate(across(where(is.list), ~ purrr::modify_if(.x, is.null, ~ NA)))
#> # A tibble: 2 × 2
#> x y
#> <list> <int>
#> 1 <int [1]> 1
#> 2 <lgl [1]> 2
我们可以用map
作为
library(purrr)
library(dplyr)
df %>%
mutate(across(where(is.list), map, `%||%`, NA))
# A tibble: 2 × 2
x y
<list> <int>
1 <int [1]> 1
2 <lgl [1]> 2
数据
df <- tibble(x = list(1L, NULL), y = 1:2)
使用 tibble
,可以有包含列表的 NULL 单元格:
tibble(x = list(1L, NULL), y = 1:2)
这给了我们:
# A tibble: 2 x 2
x y
<list> <int>
1 <int [1]> 1
2 <NULL> 2
您可以使用 View()
我们如何用 NA 替换 tibble 的所有 NULL 单元格?
预期输出为:
tibble(x = list(1L, NA), y = 1:2)
产生:
# A tibble: 2 x 2
x y
<list> <int>
1 <int [1]> 1
2 <lgl [1]> 2
但实际上是:
我试过了:
is.null(df)
但它的行为不像 is.na()
...
然后我来了:
map(df, function(l) map(l, function(e) if(is.null(e)) NA else e))
但我很难用它来创造新的乐趣:
do.call(as_tibble, map(df, function(l) map(l, function(e) if(is.null(e)) NA else e)))
这给了我一个错误:
Error: Columns 1 and 2 must be named.
Use .name_repair to specify repair.
Run `rlang::last_error()` to see where the error occurred.
实现您想要的结果的tidyverse
方法可能如下所示:
library(purrr)
library(tibble)
library(dplyr)
df <- tibble(x = list(1L, NULL), y = 1:2)
df %>%
mutate(across(where(is.list), ~ purrr::modify_if(.x, is.null, ~ NA)))
#> # A tibble: 2 × 2
#> x y
#> <list> <int>
#> 1 <int [1]> 1
#> 2 <lgl [1]> 2
我们可以用map
作为
library(purrr)
library(dplyr)
df %>%
mutate(across(where(is.list), map, `%||%`, NA))
# A tibble: 2 × 2
x y
<list> <int>
1 <int [1]> 1
2 <lgl [1]> 2
数据
df <- tibble(x = list(1L, NULL), y = 1:2)