我想保留列中第一次出现更改值的行(下例中的最后一列)。我的数据框是一个 xts 对象。
在下面的示例中,我将在最后一列中保留第一行,但不保留接下来的两行,因为它们与前 2 行相比没有变化。然后我将保留接下来的三行(序列 323),因为它们发生了变化每次,并删除接下来的 4 个,因为它们没有改变,依此类推。最终的数据框看起来比原始数据框更小。
任何帮助表示赞赏!
原始数据框
2007-01-31 2.72 4.75 2
2007-02-28 2.82 4.75 2
2007-03-31 2.85 4.75 2
2007-04-30 2.74 4.75 3
2007-05-31 2.46 4.75 2
2007-06-30 2.98 4.75 3
2007-07-31 4.19 4.75 3
2007-08-31 4.55 4.75 3
2007-09-30 4.20 4.75 3
2007-10-31 4.36 4.75 3
2007-11-30 5.75 4.76 4
2007-12-31 5.92 4.76 4
2008-01-31 6.95 4.87 4
2008-02-29 7.67 4.87 4
2008-03-31 8.21 4.90 4
2008-04-30 6.86 4.91 1
2008-05-31 6.53 5.07 1
2008-06-30 7.35 5.08 1
2008-07-31 8.00 5.13 4
2008-08-31 8.36 5.19 4
最终数据框
2007-01-31 2.72 4.75 2
2007-04-30 2.74 4.75 3
2007-05-31 2.46 4.75 2
2007-06-30 2.98 4.75 3
2007-11-30 5.75 4.76 4
2008-04-30 6.86 4.91 1
2008-07-31 8.00 5.13 4
您可以使用data.table::shift
过滤器,加上第一行,在rbind
library(data.table)
rbind(setDT(dt)[1],dt[v3!=shift(v3)])
或使用的等效方法dplyr
library(dplyr)
bind_rows(dt[1,], filter(dt, v3!=lag(v3)))
输出:
date v1 v2 v3
<IDat> <num> <num> <int>
1: 2007-01-31 2.72 4.75 2
2: 2007-04-30 2.74 4.75 3
3: 2007-05-31 2.46 4.75 2
4: 2007-06-30 2.98 4.75 3
5: 2007-11-30 5.75 4.76 4
6: 2008-04-30 6.86 4.91 1
7: 2008-07-31 8.00 5.13 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句