You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:06:03