【发布时间】:2015-01-17 06:41:39
【问题描述】:
我在 R 中有一个 应该是重复的数据框。但是,我需要删除一些重复项。特别是,我只想删除行相邻的重复项,但保留其余的。例如,假设我有数据框:
df = data.frame(x = c("A", "B", "C", "A", "B", "C", "A", "B", "B", "C"),
y = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
这会产生以下数据框
x y
A 1
B 2
C 3
A 4
B 5
C 6
A 7
B 8
B 9
C 10
在这种情况下,我希望重复“A、B、C、A、B、C 等”。但是,只有当我看到 adjacent row 重复时才会出现问题。在我上面的示例中,这将是第 8 行和第 9 行,其中重复的“B”彼此相邻。
在我的数据集中,无论何时发生这种情况,第一个实例始终是用户错误,第二个实例始终是正确的版本。在极少数情况下,可能会出现重复出现 3 次(或更多)次的情况。但是,在每种情况下,我总是希望保留最后一次出现。因此,按照上面的示例,我希望最终的数据集看起来像
A 1
B 2
C 3
A 4
B 5
C 6
A 7
B 9
C 10
在 R 中有一种简单的方法可以做到这一点吗?提前感谢您的帮助!
编辑:美国东部标准时间 2014 年 11 月 19 日下午 12:14 用户 Akron(拼写?)发布了一个解决方案,该解决方案已被删除。我现在知道为什么了,因为它似乎对我有用?
解决办法是
df = df[with(df, c(x[-1]!= x[-nrow(df)], TRUE)),]
它似乎对我有用,为什么它被删除了?例如,如果连续重复超过 2 个:
df = data.frame(x = c("A", "B", "B", "B", "C", "C", "C", "A", "B", "C", "A", "B", "B", "C"), y = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
x y
1 A 1
2 B 2
3 B 3
4 B 4
5 C 5
6 C 6
7 C 7
8 A 8
9 B 9
10 C 10
11 A 11
12 B 12
13 B 13
14 C 14
> df = df[with(df, c(x[-1]!= x[-nrow(df)], TRUE)),]
> df
x y
1 A 1
4 B 4
7 C 7
8 A 8
9 B 9
10 C 10
11 A 11
13 B 13
14 C 14
这似乎行得通?
【问题讨论】:
-
df[diff(as.numeric(df$x)) != 0, ]可能吗? -
@DavidArenburg 当我运行
as.numeric(df$x)时,我得到了NAs 的向量。 -
@DavidArenburg 哎呀。我忘了我加了
stringsAsFactors = F。 -
@akrun,看来他是对的,你现在可以取消删除了:)
-
是的,你似乎是对的。我实际上评论说“我不认为”它会起作用,因为我也没有测试它
标签: r duplicates