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

如何根据指定列条件合并R数据框两列并保持行索引对应

R语言按条件合并列的索引匹配问题

原始数据

a <- c(1,2,1,3)
b <- c(0.5, 0.6, 0.7, 0.3)
d <- c(0.4, 0.3, 0.6, 0.4)

df <- data.frame(a,b,d)

df

输出:

a   b   d
1 1 0.5 0.4
2 2 0.6 0.3
3 1 0.7 0.6
4 3 0.3 0.4

需求

新增一列new,规则:

  • 当a=1时,取d列对应行的值
  • 当a≠1时,取b列对应行的值

错误尝试

你之前直接拼接两个子集结果的代码,会导致行顺序错位:

df$new <- c(df[df$a != 1, "b"], df[df$a == 1, "d"])

df

错误输出:

a   b   d new
1 1 0.5 0.4 0.6
2 2 0.6 0.3 0.3
3 1 0.7 0.6 0.4
4 3 0.3 0.4 0.6

期望输出

a   b   d new
1 1 0.5 0.4 0.4
2 2 0.6 0.3 0.6
3 1 0.7 0.6 0.6
4 3 0.3 0.4 0.3

正确解法

方法1:基础R的ifelse()函数

这是最简洁的方式,ifelse会逐行判断条件,直接生成对应位置的值,完美匹配行索引:

df$new <- ifelse(df$a == 1, df$d, df$b)

方法2:索引赋值

先给new列默认赋值为b列,再替换a=1的行:

df$new <- df$b
df$new[df$a == 1] <- df$d[df$a == 1]

逻辑清晰,适合后续扩展复杂条件。

方法3:tidyverse风格(dplyr包)

如果习惯使用tidyverse工具链,用mutate+case_when可读性更强:

library(dplyr)

df <- df %>%
  mutate(new = case_when(
    a == 1 ~ d,
    TRUE ~ b
  ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:31:00