根据下一行的信息删除一行 - R

  • 本文关键字:一行 信息删除 r row
  • 更新时间 :
  • 英文 :


我有一个名为mydata的数据集,除其他变量外,它还包含以下两个变量:

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

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

如果当前plot.name行等于下一行(例如,如果cam41 == cam41),并且当前time.date行等于下一行(例如,如果23 == 23),则删除第二行。

我试图用ifelse做到这一点,但它不起作用,或者我的代码可能是错误的。

我认为您正在寻找的是来自基本 R 的unique或来自dplyrdistinct。如果需要将此条件应用于数据框中的所有列,则以下内容应有效:

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

df %>% 
mutate(id = row_number()) %>% 
distinct(plot.name, time.date, .keep_all = TRUE)

或者从基数 Rduplicated

df[!duplicated(df[c("plot.name", "time.date")]), ]

如果您的目的不是使用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())

最新更新