我有一个名为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
或来自dplyr
的distinct
。如果需要将此条件应用于数据框中的所有列,则以下内容应有效:
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())