【问题标题】:Extract Previous row Value based on Condition根据条件提取上一行值
【发布时间】:2017-04-03 01:03:03
【问题描述】:

要分析论文的一些数据,我需要提取满足条件之前的整行。

例如,我有一个错误列和一个响应时间列

Error    ResponseTime
0        0.22
0        0.28
1        0.89
0        0.92
1        0.21

期望的输出

Error    ResponseTime
0        0.28
0        0.92

所以如果错误 == 1 提取上一行并将其放入新的数据框中。

我尝试使用 zoo 库,但无法成功。

我试过这个解决方案:

Dfa1test <- Dfa1test[c(FALSE, head(Dfa1test$error, -1) == 1), , drop = FALSE]

最后一个解决方案的问题是我得到的是 row + 1 而不是 row -1。

我试图找到其他解决方案,但没有接近我想要的输出。

【问题讨论】:

  • 随便df[which(df$Error == 1) - 1, ]
  • @Rich Scriven 执行此操作时,我得到第 +1 行而不是第 -1 行
  • 我答对了。
  • 没关系,我的测试数据框似乎有问题。谢谢!
  • @PierreJardinet 假设 Error 中的相邻元素为 1(更一般的情况),那么预期的输出是什么?

标签: r dataset data-science


【解决方案1】:

这是一个使用data.table的选项

library(data.table)
setDT(df1)[df1[,.I[which(Error==1)-1]]]
#   Error ResponseTime
#1:     0         0.28
#2:     0         0.92

如果当前元素为 1 时,我们只需要 'Error' 中的前一个元素为 0 的行

setDT(df)[df[, .I[which(shift(Error, fill=999)==0 & Error==1)-1]]]

注意:在此示例中,它们都给出相同的结果

【讨论】:

  • 您好 akrun,谢谢您的回答!尽管我使用了 Rich Scriven 答案。会试试你的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2021-05-22
  • 1970-01-01
  • 2018-01-20
  • 2017-02-12
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多