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

在R中按Country和Name合并重复行,将ABCD列数据移至新列

问题:按Country和Name分组合并重复行的列数据

样本数据

df <- data.frame(
  Country = c("FR", "FR", "US", "US", "US", "US", "AU", "UK", "UK", "UK"), 
  Name = c("Jean","Jean","Rose","Rose","Rose","Rose","Liam","Mark","Mark","Mark"),
  A = c(2,NA,NA,1,3,NA,1,2,NA,NA),
  B = c(2,5,NA,1,NA,2,1,NA,3,NA),
  C = c(2,NA,4,1,NA,NA,NA,NA,NA,NA),
  D = c(NA,3,NA,NA,4,4,1,2,4,4)
)

输入数据

Country Name   A  B  C  D  
1      FR Jean   2  2  2  NA 
2      FR Jean   NA 5  NA 3  
3      US Rose   NA NA 4  NA 
4      US Rose   1  1  1  NA 
6      US Rose   3  NA NA 4  
7      US Rose   NA 2  NA 4  
8      AU Liam   1  1  NA 1  
9      UK Mark   2  NA NA 2  
10     UK Mark   NA 3  NA 4  
11     UK Mark   NA NA NA 4  

期望输出

Country Name   A  B  C  D  A  B  C  D  A  B  C  D  A  B  C  D 
1      FR Jean   2  2  2  NA NA 5  NA 3
2      US Rose   NA NA 4  NA 1  1  1  NA 3  NA NA 4  NA 2  NA 4    
3      AU Liam   1  1  NA 1  
4      UK Mark   2  NA NA 2  NA 3  NA 4  NA NA NA 4   

需求目标

  • 当连续行的Country和Name列数据相同时,将这些行中的A、B、C、D列数据移至新的A、B、C、D列;
  • 实际数据中,Country和Name的重复次数可能为1、2、3…n次,需实现条件逻辑,自动识别重复行并完成列扩展处理。

解决方案(R语言)

用dplyr和tidyr包即可实现,步骤清晰且支持任意重复次数:

library(dplyr)
library(tidyr)
library(stringr)

# 处理核心逻辑
result <- df %>%
  # 给每个Country+Name组的行编序号
  group_by(Country, Name) %>%
  mutate(row_id = row_number()) %>%
  ungroup() %>%
  # 把多行数据转成多列
  pivot_wider(
    id_cols = c(Country, Name),
    names_from = row_id,
    values_from = c(A, B, C, D),
    names_sep = ""
  ) %>%
  # 调整列顺序:按组内行号对应排列A/B/C/D列
  select(
    Country, Name,
    order(sapply(str_extract(names(.), "\\d+$"), as.integer))
  )

# 把列名的数字去掉,改成重复的A/B/C/D
names(result)[-c(1,2)] <- rep(c("A", "B", "C", "D"), length(names(result)[-c(1,2)])/4)

print(result)

代码说明

  • group_by(Country, Name) %>% mutate(row_id = row_number()):给每个分组内的行添加序号,用来区分同一组的不同行;
  • pivot_wider:将分组内的多行数据横向扩展为多列,用行号区分不同组内的列;
  • 最后调整列名和顺序,得到和期望输出完全一致的格式,同时兼容任意次数的重复分组。

内容的提问来源于stack exchange,提问作者Loki123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:25:30