我有以下 * Dataframe *:
a a a b c c d e a a b b b e e d d
所需结果应为
a b c d e a b e d
这意味着没有两个连续的行应该有相同的值。如何可以做到这一点,而不使用循环。
由于我的数据集非常大,执行循环需要花费大量时间。
Dataframe 结构如下所示
a 1
a 2
a 3
b 2
c 4
c 1
d 3
e 9
a 4
a 8
b 10
b 199
e 2
e 5
d 4
d 10
结果:
a 1
b 2
c 4
d 3
e 9
a 4
b 10
e 2
d 4
它应该删除整行。
5条答案
按热度按时间tnkciper1#
一种简单的方法是使用
rle
:以下是您的示例数据:
rle
返回具有两个值的list
:游程长度("lengths
"),以及为该游程重复的值("values
")。更新:对于
data.frame
如果您使用的是
data.frame
,请尝试以下操作:更新2
"data.table"包中有一个函数
rleid
,可以让你很容易地完成这个任务。使用上面的mydf
,尝试:bq3bfh9z2#
编辑:对于
data.frame
DPLYR溶液是一种线性:
事后脚本
@Carl Witthoft建议的
lead(x,1)
以相反的顺序迭代。baubqpgj3#
以R为底,我喜欢有趣的算法:
u4dcyp6a4#
虽然我很喜欢,......呃,* 爱 *
rle
,这里有一个枪战:编辑:不能弄清楚
dplyr
到底是怎么回事,所以我用了dplyr::lead
。我在OSX,R3.1.2,和最新的dplyr
从CRAN。xxe27gdn5#
Tidyverse解决方案:
此外,如果存在与连续值列相关联的另一列
y
,则此解决方案允许一些灵活性:我们可以选择不同的切片函数,如slice_max、slice_min、slice_head和slice_tail。
这个堆栈溢出线程出现在R4DS的第二版中,在书中的数字章节。