使用tidyr::unnest_wider()时如何基于字符向量为新列自定义命名
可以直接通过unnest_wider()的names_repair参数实现,无需提前遍历嵌套列表命名,在大数据集下性能远高于预先命名的方案。
方案1:适配当前场景的最简写法
直接在names_repair中传入最终的列名向量即可,仅需一次全局命名操作,无额外遍历开销:
library(tidyr) my_tbl %>% unnest_wider( col = col_y, names_repair = ~ c("col_x", animal_names) )
运行后输出完全符合预期,无任何命名警告:
# A tibble: 3 × 4 col_x dog cat zebra <chr> <dbl> <dbl> <dbl> 1 a 1 2 3 2 b 4 5 6 3 c 7 8 9
方案2:多原始列的通用适配写法
如果你的原始表除了col_x还有其他固定列,不想手动罗列原始列名,可以用前缀匹配批量修改新列名:
my_tbl %>% unnest_wider(col_y, names_sep = "_", names_repair = "minimal") %>% rename_with(~ animal_names, starts_with("col_y_"))
names_repair = "minimal"会抑制默认命名的警告,后续仅对col_y拆分出的新列做重命名,兼容性更强。
两种方案的命名操作都是列层面的全局操作,时间复杂度和数据集行数无关,处理百万级以上数据时性能比预先给每个列表元素命名的方案高2~3个数量级。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

