gpt4 book ai didi

r - 在R中仅删除数据帧中的相邻重复项

转载 作者:行者123 更新时间:2023-12-04 09:45:19 26 4
gpt4 key购买 nike

我在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等”。但是,如果我看到相邻行重复的 ,这只是一个问题。在上面的示例中,这将是第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日,美国东部时间
用户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[with(df, c(x[-1]!= x[-nrow(df)], TRUE)),]
# x y
#1 A 1
#2 B 2
#3 C 3
#4 A 4
#5 B 5
#6 C 6
#7 A 7
#9 B 9
#10 C 10

解释

在这里,我们正在将一个元素与其之前的元素进行比较。这可以通过从该列中删除 first element以及将该列与删除了 last element的列进行比较(以使长度变得相等)来完成
 df$x[-1] #first element removed
#[1] B C A B C A B B C
df$x[-nrow(df)]
#[1] A B C A B C A B B #last element `C` removed

df$x[-1]!=df$x[-nrow(df)]
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE

在上面,当我们删除一个元素时,长度 1小于 nrowdf。为了弥补这一点,我们可以连接一个 TRUE,然后使用此 index设置数据集的子集。

关于r - 在R中仅删除数据帧中的相邻重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27022057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com