【问题标题】:Delete the entire row if the a value in value is equal to previous row in R如果 value 中的 a 值等于 R 中的前一行,则删除整行
【发布时间】:2015-07-29 00:38:22
【问题描述】:

我是 R 编程新手,我需要帮助才能根据单个列的值删除整行。如果单列中的值等于前一行值,我想删除该行。

以下是我的数据,

   x.id x.timestamp x.count
71    1  1435114605      61
72    1  1435114606      61
73    1  1435114659      61
74    1  1435114719      62
75    1  1435114726      62
76    1  1435114780      62
77    1  1435155998      62
78    1  1435156059      62
79    1  1435156076      62
80    1  1435156119      62

这里我要删除基于 x$x.count 值的行。

我的输出应该是,

   x.id x.timestamp x.count
71    1  1435114605      61
74    1  1435114719      62

我不能在这里使用重复或唯一的函数,因为稍后相同的值会在数据集中重复。我只想根据以前的值删除数据。

【问题讨论】:

  • 用data.table,一个选项是library(data.table);setDT(dat)[as.logical(x.count-shift(x.count, fill=x.count[1L]-1))]应该很快。

标签: r duplicates


【解决方案1】:

您可以使用diff 查找连续行之间的差异大于 0(加上第一行)的位置。如果x.count 未排序,则可能使用!=0

dat[c(T, diff(dat$x.count)>0), ]

#    x.id x.timestamp x.count
# 71    1  1435114605      61
# 74    1  1435114719      62

【讨论】:

  • @ijazahamed 如果您的数据很大,您可能只想简单地将答案翻译成data.table
  • 从外观上看,您缺少一个括号。
  • 是的,我的错……现在明白了……谢谢
  • @nongkrong 我在这里遇到了一些问题。 x.count 值的范围从 61,62,1,3,5 ..... 但是在删除重复项后,我只得到 61,62,3,5 ......这是因为 diff(dat$ x.count)>0)..可以相应地改变吗?
  • @ijazahamed 你试过用!=0替换>0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多