如何在tibble中将列表列的NULL单元格替换为NA
解决方案
你遇到的报错本质是do.call用法错误:map(df, ...)处理后返回的本身就是列名对应处理后内容的命名列表,直接传给as_tibble()即可,不需要用do.call拼接参数。
方案1:自动适配所有列表列(推荐)
结合dplyr的列遍历逻辑,可以自动处理tibble中所有列表类型的列,不需要手动指定列名:
# 加载依赖包 library(tidyverse) # 示例数据 df <- tibble(x = list(1L, NULL), y = 1:2) # 替换所有列表列中的NULL为NA df_res <- df %>% mutate(across(where(is.list), ~ map(., \(item) if(is.null(item)) NA else item)))
如果只需替换指定列表列的NULL,修改参数即可,比如仅处理x列:
df_res <- df %>% mutate(x = map(x, \(item) if(is.null(item)) NA else item))
运行后输出结果完全符合预期:
# A tibble: 2 × 2 x y <list> <int> 1 <int [1]> 1 2 <lgl [1]> 2
方案2:修改你原有的代码
去掉多余的do.call即可正常运行:
df_res <- as_tibble(map(df, function(l) map(l, function(e) if(is.null(e)) NA else e)))
内容的提问来源于stack exchange,提问作者pietrodito
相关产品推荐
相关产品推荐

