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

如何对DataFrame中的交替列对批量应用unite()合并操作?

批量合并交替列对的tidyverse实现方案

针对你描述的DataFrame结构(Date列为首,后续按「地区列-通用列」交替排列),可以通过列分组+reduce批量执行unite的方式实现需求,具体步骤如下:

1. 准备工作(加载包+构造示例数据)

library(tidyverse)

# 构造与你结构一致的示例数据
df <- tibble(
  Date = c("2021-04-01", "2021-04-02", "2021-04-03"),
  England = c(145, 200, 120),
  ...3 = c("e", "e", ""),
  Wales = c(23, 90, 66),
  ...5 = c("", "s", "e")
)

2. 核心处理逻辑

# 提取除Date外的列名,按每2列一组拆分(对应「地区列-通用列」对)
cols_to_group <- names(df)[-1]
col_groups <- split(cols_to_group, ceiling(seq_along(cols_to_group)/2))

# 批量执行unite合并操作
result_df <- col_groups %>%
  reduce(
    .init = df,
    ~ unite(
      .x,
      col = !!names(.y)[1],  # 新列名沿用原地区列的名称
      all_of(.y),            # 指定当前组要合并的两列
      sep = "-",             # 设置分隔符为横杠
      remove = TRUE          # 合并后删除原列
    )
  )

3. 关键细节说明

  • 如果你的原始数据中空值以NA形式存在而非空白字符串,需先将NA替换为空,避免合并后出现120-NA这类结果:
    df_clean <- df %>% mutate(across(-Date, ~ replace_na(.x, "")))
    # 之后用df_clean替代df执行后续分组和reduce操作
    
  • split(cols_to_group, ceiling(seq_along(cols_to_group)/2)) 自动将交替列按顺序两两分组,适配你190组地区列的场景;
  • reduce 函数会从原始DataFrame开始,依次对每个列组执行合并,最终得到保留Date列、所有地区列与对应通用列合并后的结果。

最终结果示例

执行后result_df的结构如下:

DateEnglandWales
2021-04-01145-e23-
2021-04-02200-e90-s
2021-04-03120-66-e

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:49