我正在努力做到这个线程中的用户正在尝试做的事情:
Select specific rows based on previous row value (in the same column)
基本思想是在列Type中选择值为20的所有行,该列紧跟在列Type中的值为40的行之后。最终结果应该是一个数据框,其中只有列Type为20或40的行。
提供的解决方案如下所示:
# Get indices of rows that meet condition
ind2 <- which(df$Type==20 & dplyr::lag(df$Type)==40)
# Get indices of rows before the ones that meet condition
ind1 <- which(df$Type==20 & dplyr::lag(df$Type)==40)-1
这样可行,我可以看到已经选择了正确的行。
但是数据子集的最后一步
df[c(ind1,ind2)]
返回错误消息:
Error in `[.data.frame`(df, c(ind1, ind2)) : undefined columns selected
我无法弄清楚为什么会这样。任何想通过这个的想法将非常感谢!
答案 0 :(得分:0)
正如Abdou所说:df[c(ind1,ind2)]
不完整。
无论何时使用矩阵或数据框,方括号都表示:[ rows , columns ]
。
在您的情况下,您指示数据框选择ind1 and ind2
的组合,而不是告诉它在行或列中查找。结果你得到的错误。具体而言,R将考虑根据ind1
和ind2
规范查看列。
只需将其标注为df[c(ind1,ind2),]
,您的df
就会显示包含所需值的所有行。