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

R语言如何判断A列值是否存在于当前行及之前的B列中

R语言校验A列值是否存在于B列前序(含当前)行的实现方案

示例数据集

给定的测试数据如下:

df <- structure(list(A = 1:5, B = c(1L, 5L, 2L, 3L, 3L)), 
                class = "data.frame", row.names = c(NA, -5L))

原始数据预览:

AB
11
25
32
43
53

需求拆解

对每行i做如下校验:

  • 校验范围是B列第1行到第i行(含当前行)
  • 若A[i]存在于上述范围内,Result赋值为B,否则赋值为NA

实现代码

基础R实现(无额外依赖)

df$Result <- sapply(seq_len(nrow(df)), function(i) {
  ifelse(df$A[i] %in% df$B[1:i], "B", NA_character_)
})

tidyverse生态实现

library(dplyr)
library(purrr)

df <- df %>%
  mutate(Result = map2_chr(A, row_number(), ~ifelse(.x %in% B[1:.y], "B", NA_character_)))

输出结果

运行后得到的结果和预期完全一致:

A B Result
1 1 1      B
2 2 5   <NA>
3 3 2   <NA>
4 4 3   <NA>
5 5 3      B

扩展用法

如果需要校验的是不含当前行的前序行(比如第5行只校验B列1-4行),只需调整校验范围即可:

df$Result <- sapply(seq_len(nrow(df)), function(i) {
  # 第一行无前序行直接返回NA
  if(i == 1) return(NA_character_)
  ifelse(df$A[i] %in% df$B[1:(i-1)], "B", NA_character_)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:09:00