求助:构建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
相关产品推荐
相关产品推荐

