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

如何在R语言中根据ID行值将两列合并为一列?

问题解决:根据ID合并DataFrame列

需求说明

现有如下DataFrame,需要新增on_off列:

  • 当ID为a1、a2时,取对应行的a_on_off值
  • 当ID为b1、b2时,取对应行的b_on_off值
  • 其他ID对应的on_off设为NA

原始数据:

a_on_offb_on_offIDDate
offonb12017-08-09
offona22017-08-09
offona12017-08-10
offona12017-08-11
ononx12017-08-12
ononx22017-08-13
onony12017-08-13
offoffb12017-08-13
offoffa22017-08-14
offoffa22017-08-15
ononb22017-08-15
onony12017-08-15
ononx12017-08-15
onony32017-08-16

原代码问题

你提供的代码存在两个问题:

  1. 条件判断的字符串多了多余的闭合括号:"a2)"、"b2)"是错误写法,应为"a2"、"b2"
  2. 赋值时未对右侧列做行子集匹配,导致将整列值批量填充,而非对应行的值

正确解法

方法1:基础R实现

先初始化on_off列为NA,再针对对应ID的行赋值:

# 初始化on_off列为NA字符型
df$on_off <- NA_character_

# 给a类ID的行赋值对应a_on_off
df$on_off[df$ID %in% c("a1", "a2")] <- df$a_on_off[df$ID %in% c("a1", "a2")]

# 给b类ID的行赋值对应b_on_off
df$on_off[df$ID %in% c("b1", "b2")] <- df$b_on_off[df$ID %in% c("b1", "b2")]

方法2:dplyr包实现(更简洁)

使用case_when按条件批量处理:

library(dplyr)

df <- df %>%
  mutate(on_off = case_when(
    ID %in% c("a1", "a2") ~ a_on_off,
    ID %in% c("b1", "b2") ~ b_on_off,
    TRUE ~ NA_character_
  ))

处理后结果示例

处理后的on_off列如下:

a_on_offb_on_offIDDateon_off
offonb12017-08-09on
offona22017-08-09off
offona12017-08-10off
offona12017-08-11off
ononx12017-08-12NA
ononx22017-08-13NA
onony12017-08-13NA
offoffb12017-08-13off
offoffa22017-08-14off
offoffa22017-08-15off
ononb22017-08-15on
onony12017-08-15NA
ononx12017-08-15NA
onony32017-08-16NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:55:21