我有以下数据框
x <- data.frame(id = c(1:6),
a = c('a', 'b', 'b', 'a', 'a', 'c'),
b = rep(2, 6),
c = c(5, 4, 4, 5, 5, 2))
> x
id a b c
1 1 a 2 5
2 2 b 2 4
3 3 b 2 4
4 4 a 2 5
5 5 a 2 5
6 6 c 2 2
我想以
结束 id a b c
1 1 a 2 5
2 2 b 2 4
4 4 a 2 5
6 6 c 2 2
要求是我想删除该行,如果它与上一行相同,但列id
除外。如果它与列中的列相同但不是之前的列,我不想摆脱它。例如,id4与id1相同但未被删除,因为它不在其上方。
任何帮助将不胜感激
答案 0 :(得分:3)
我们可以使用base R
x[!c(FALSE, !rowSums(x[-1, -1] != x[-nrow(x), -1])),]
# id a b c
#1 1 a 2 5
#2 2 b 2 4
#4 4 a 2 5
#6 6 c 2 2
答案 1 :(得分:2)
以下是lag
中使用dplyr
函数的方法。我们的想法是创建一个关键列,并检查它是否与前一列相同。
library(dplyr)
x %>%
mutate(key=paste(a, b, c, sep="|")) %>%
filter(key != lag(key, default="0")) %>%
select(-key)