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

求助:构建R函数/循环提取二进制变量1后接0对应的y值

解决方法:提取二进制变量1后紧跟0对应的y值

首先咱们先把你的示例数据补全,方便后续测试:

# 构造完整的示例数据框
df <- data.frame(
  ID = rep(1001, 5),
  variable = c(1, 1, 0, 1, 0),
  y = c(10, 20, 30, 40, 50)
)

你的需求是找到variable列中1后面紧跟0的情况,然后提取对应行的y值。核心逻辑是:找到当前行variable为0,且前一行variable为1的行,然后取出这些行的y值。下面提供两种实现方式:

方法一:基础R实现

不需要额外包,用diff()函数计算相邻值的差值,当1→0时差值为-1,找到这些位置后,对应y的位置就是差值位置+1:

# 计算variable列相邻元素的差值
diff_values <- diff(df$variable)
# 找到差值为-1的索引,提取对应下一行的y值
result_vec <- df$y[which(diff_values == -1) + 1]

# 查看结果
result_vec
# 输出:[1] 30 50

方法二:dplyr包实现(更直观)

用dplyr的lag()函数获取前一行的variable值,直接筛选符合条件的行并提取y:

library(dplyr)

result_vec <- df %>%
  # 筛选:当前行variable是0,且前一行variable是1
  filter(variable == 0 & lag(variable) == 1) %>%
  # 提取y列转为向量
  pull(y)

# 查看结果
result_vec
# 输出:[1] 30 50

这两种方法都能得到你想要的结果,如果你之前尝试失败,大概率是搞反了判断逻辑(比如找了0后面的1,或者错误定位了行位置),现在这两种方式都精准定位到了1后紧跟0的情况~

内容的提问来源于stack exchange,提问作者Bruno Kluwe Schiavon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:58:45