根据下一个信息删除一行 - R.

时间:2018-02-21 12:53:51

标签: r row

我有一个名为mydata的数据集,除了其他变量之外,还包含这两个数据集,如下面的摘录中所示:

plot.name    time.date
cam41        23
cam41        23
cam50        13
cam50        13
cam50        15

我正在尝试使用以下规则找到在每条记录上创建迭代控件的方法:

如果plot.name的当前行等于下一行(例如,如果cam41 == cam41)并且time.date的当前行等于下一行(例如{{1} }),然后删除第二行。

我试图用23 == 23来做这件事,但它不起作用,或者我的代码可能错了。

2 个答案:

答案 0 :(得分:3)

我认为你要找的是来自R的unique或来自distinct的{​​{1}}。如果您需要将此条件应用于数据框中的所有列,则以下内容应该有效:

dplyr

或者:

unique(df)

  plot.name time.date
1     cam41        23
3     cam50        13
5     cam50        15

但是,如果您有多个变量,但仅关注dplyr::distinct(df) plot.name time.date 1 cam41 23 2 cam50 13 3 cam50 15 plot.name,请考虑以下time.date

dplyr

来自基地R的df %>% mutate(id = row_number()) %>% distinct(plot.name, time.date, .keep_all = TRUE)

duplicated

答案 1 :(得分:1)

如果你的目的不是用unique删除所有重复的行,而你真的想按顺序检查每一行:

df[head(df$plot.name, -1L) == df$plot.name[-1L] & head(df$time.date, -1L) == df$time.date[-1L], ]

dplyr

library(dplyr)
filter(df, (lead(plot.name) == plot.name & lead(time.date) == time.date) | row_number() == n())