根据以前的值从数据框中选择行 - 提供的解决方案无法正常工作

时间:2016-12-11 02:21:58

标签: r dplyr subset

我正在努力做到这个线程中的用户正在尝试做的事情:

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

我无法弄清楚为什么会这样。任何想通过这个的想法将非常感谢!

1 个答案:

答案 0 :(得分:0)

正如Abdou所说:df[c(ind1,ind2)]不完整。 无论何时使用矩阵或数据框,方括号都表示:[ rows , columns ]

在您的情况下,您指示数据框选择ind1 and ind2的组合,而不是告诉它在行或列中查找。结果你得到的错误。具体而言,R将考虑根据ind1ind2规范查看列。

只需将其标注为df[c(ind1,ind2),],您的df就会显示包含所需值的所有行。