如何在R语言的数据框中获取指定范围内特定值的位置
如何在R语言中查找指定行范围内值为0的位置?
需求:现有36行的数据框,需在12至36行的范围内,找出Baseline history Q列中值为0的所有行位置。
数据框结构
structure(list(`Key Figures` = c("Jan-19", "Feb-19", "Mar-19", "Apr-19", "May-19", "Jun-19", "Jul-19", "Aug-19", "Sep-19", "Oct-19", "Nov-19", "Dec-19", "Jan-20", "Feb-20", "Mar-20", "Apr-20", "May-20", "Jun-20", "Jul-20", "Aug-20", "Sep-20", "Oct-20", "Nov-20", "Dec-20", "Jan-21", "Feb-21", "Mar-21", "Apr-21", "May-21", "Jun-21", "Jul-21", "Aug-21", "Sep-21", "Oct-21", "Nov-21", "Dec-21"), SKU = c("XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645", "XYZ_20645" ), `Baseline history Q` = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 0, 100, 0, 30, 0, 50, 70, 280)), row.names = c(NA, -36L), class = c("tbl_df", "tbl", "data.frame"))
现有代码
Pd <- read_excel("X:/X/X/X- X/X/X.xlsx", sheet = "X") Start_Location <- head(which(Pd$`Baseline history Q`!=0),1) End_Location <- tail(which(Pd$`Baseline history Q`!=0),1) which(Pd$`Baseline history Q`!=0)
已知Start_Location = 12,End_Location = 36,需在该区间内找到值为0的位置。
解决方案
方法1:截取区间后转换行号
先提取目标行范围内的列数据,找到0的相对位置后,转换为原数据框的绝对行号:
# 提取12-36行的目标列数据 target_data <- Pd$`Baseline history Q`[Start_Location:End_Location] # 找出相对位置并转换为绝对行号 zero_positions <- which(target_data == 0) + Start_Location - 1
方法2:直接用逻辑条件筛选
通过逻辑运算同时满足「值为0」和「行号在目标区间」两个条件:
zero_positions <- which(Pd$`Baseline history Q` == 0 & seq(nrow(Pd)) >= Start_Location & seq(nrow(Pd)) <= End_Location)
验证结果
运行上述代码后,针对示例数据会返回:[1] 26 29 31 33,对应数据框中12-36行内值为0的行位置。
内容的提问来源于stack exchange,提问作者user20203146
相关产品推荐
相关产品推荐

