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

如何根据数据框指定列的匹配行将向量追加为新列?

实现R语言数据框按条件填充新列的需求

原始数据定义

c1 <- c(3,6,8,2,7)
c2 <- c("S", "", "S", "", "")
df <- data.frame(c1, c2)

vec <- c(200, 210)

需求说明

给数据框新增一列new_column,仅在c2列值为"S"的行依次填入vec的元素,其余行留空,最终输出符合示例格式。

解决方案

方法1:基础R实现

无需额外包,直接通过索引匹配填充:

# 初始化新列为NA
df$new_column <- NA
# 筛选c2等于"S"的行位置
s_indices <- which(df$c2 == "S")
# 给对应位置赋值vec
df$new_column[s_indices] <- vec

# 若要将NA转为空字符串(匹配示例显示效果)
df$new_column <- as.character(df$new_column)
df$new_column[is.na(df$new_column)] <- ""

方法2:dplyr(tidyverse)实现

适合处理大规模数据,代码逻辑更清晰:

library(dplyr)

df <- df %>%
  # 按c2为"S"的顺序匹配vec元素,其余行设为NA
  mutate(new_column = case_when(
    c2 == "S" ~ vec[cumsum(c2 == "S")],
    TRUE ~ NA_character_
  )) %>%
  # 将NA替换为空字符串
  mutate(new_column = ifelse(is.na(new_column), "", new_column))

注意事项

  • 务必确保vec的长度与df$c2中"S"的行数完全一致,否则会出现循环填充或报错。可提前验证:length(vec) == sum(df$c2 == "S")。
  • 实际数据分析中,用NA表示缺失值比空字符串更规范,若无需匹配示例的空显示,可跳过转字符和替换NA的步骤。

内容的提问来源于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.02 11:55:38