R语言如何折叠重复观测行并基于多列创建新增扩展列
R 多行观测折叠多列同时转宽解决方案
核心修改方法
调整pivot_wider的values_from参数传入多列,再通过names_glue自定义列名规则即可实现需求,完整代码如下:
library(dplyr) library(tidyr) result <- df1 %>% group_by(rif, date) %>% mutate(n = row_number()) %>% pivot_wider( id_cols = c(rif, date), names_from = n, values_from = c(keyword, reg_birth), # 自定义列名规则:n=1时不加后缀,n≥2时拼接序号 names_glue = if_else(n == 1, case_when(.value == "reg_birth" ~ "reg.birth", TRUE ~ .value), paste0(.value, n)) )
输出结果验证
运行后得到的result结构和预期完全一致:
# A tibble: 2 × 8 # Groups: rif, date [2] rif date keyword reg.birth keyword2 reg_birth2 keyword3 reg_birth3 <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> 1 text10 20180329 Lucca Tuscany Piacenza Emilia Milano Lombardy 2 text11 20180329 Cascina Veneto Padova Veneto <NA> <NA>
参数说明
values_from = c(keyword, reg_birth):指定需要同时转宽的两个字段,无需分开多次执行转换names_glue:灵活控制生成的列名格式,这里适配了首列无序号、后续列加序号的命名规则。如果不需要把第一个reg_birth改成reg.birth,把case_when的判断去掉直接写{.value}即可。
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

