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

在R中如何根据虚拟变量值合并行数不等的两个数据集

R 不等行数据框按虚拟变量出现顺序匹配合并方案

首先修正原示例中df2的创建代码错误(原代码写为data.frame(a,b),实际应为data.frame(z,y)),可直接运行以下代码完成需求,全程无循环,采用向量化操作实现:

基础R实现(无需加载第三方包)

# 构造示例数据
x <- c(3,4,5,3,5,1,4,5)
y <- c(0,0,1,0,1,1,0,0)
df1 <- data.frame(x,y)

z <- c(7,8,9)
y <- c(1,1,1)
df2 <- data.frame(z,y)

# 合并操作
df1$z <- 0
# 定位df1中y取值为1的行位置
match_pos <- which(df1$y == 1)
# 按出现顺序匹配df2的z值
df1$z[match_pos] <- df2$z[seq_along(match_pos)]

tidyverse 实现(dplyr 语法)

library(dplyr)

df1 <- df1 %>%
  mutate(z = case_when(
    # 用cumsum统计y=1的出现顺序,直接匹配df2的z下标
    y == 1 ~ df2$z[cumsum(y == 1)],
    TRUE ~ 0
  ))

两种方法输出结果均符合要求:

> df1
  x y z
1 3 0 0
2 4 0 0
3 5 1 7
4 3 0 0
5 5 1 8
6 1 1 9
7 4 0 0
8 5 0 0

注:该方案默认df2的z列长度与df1中y=1的行数一致,若长度不匹配可根据实际需求补充截断/补全规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:27:02