如何删除重复数据的行(R)

5

我已经对这个主题进行了快速搜索,但没有找到以前的帖子中有关我的问题的答案。 这似乎非常直接,但我仍然没有找出如何有效地做到这一点。

在下面的数据框中,我想删除所有只有一个输入的行(在本例中为B500D40)。

x_1 <- c("A1", "A1","A1", "B10", "B10", "B10","B10", 
            "B500", "C100", "C100", "C100", "D40", "G100", "G100")
   z_1 <- rnorm(14, 70) 
   z_2 <- rnorm(14, 1.7)
   A <- data.frame(x_1, z_1, z_2)

        x_1      z_1       z_2
1        A1 69.65033 1.5308858
2        A1 68.72687 2.2859416
3        A1 68.32700 0.7994794
4       B10 68.68382 0.5212132
5       B10 70.23359 1.3266729
6       B10 70.68604 4.3823605
7       B10 70.52774 2.2430322
8       B500 69.62868 3.0121398
9       C100 69.41412 2.1895905
10      C100 69.10745 1.7599065
11      C100 69.70876 1.6001099
12      D40 68.96542 0.7485665
13      G100 70.21754 1.9635395
14      G100 72.70583 3.0645247

我可以手动使用以下方法来完成这个任务:
A[!A$x_1 %in% c("B500", "D40"), ]

另一种方法是使用下面的表格函数:
 table(A$x_1)

   A1  B10 B500 C100  D40 G100 
   3    4    1    3    1    2 

现在,我的问题是如何选择仅下面有数字1的条目?如果我能做到这一点,我应该能够获取名称并从数据帧中删除它们。

非常感谢任何有用的想法/代码。

2个回答

3
您可以使用duplicated两次:
A[duplicated(A$x_1) | duplicated(A$x_1, fromLast = TRUE), ]

    x_1      z_1       z_2
1    A1 70.32176 2.5074802
2    A1 70.28238 1.8819723
3    A1 67.93057 2.1899037
4   B10 69.75905 1.8493991
5   B10 70.25713 2.6948229
6   B10 69.33121 0.2793853
7   B10 70.82879 2.2831781
9  C100 70.14587 1.0332913
10 C100 69.51571 0.2590098
11 C100 70.48928 1.8471024
13 G100 72.11057 0.6914086
14 G100 69.93814 2.4245214

有关此操作的更多信息,请参见此答案


@ Sven Hohenstein,感谢您的回复。我不太明白“duplicated”是如何工作的,但我会去了解一下。 - John_dydx
@John 我添加了一个链接,其中包含更详细的信息。 - Sven Hohenstein

2

继续你的表格路径。我将你的表格分配给一个对象。然后提取所需表格条目的名称并用于对数据框进行子集划分。

tt <- table(A$x_1)
A[!A$x_1 %in% names(tt[tt == 1]), ]

# or
A[A$x_1 %in% names(tt[tt > 1]), ]

#     x_1      z_1       z_2
# 1    A1 69.18667 0.8578626
# 2    A1 71.36819 2.8482506
# 3    A1 69.71246 1.9528315
# 4   B10 69.47145 1.7852872
# 5   B10 69.12699 0.7663739
# 6   B10 70.93589 1.1431804
# 7   B10 68.72273 0.6836297
# 9  C100 70.31252 2.4651336
# 10 C100 69.89168 1.9991948
# 11 C100 70.25079 1.0823843
# 13 G100 69.56992 2.0879085
# 14 G100 68.29589 2.5432109

@ Henrik,太棒了。非常感谢你。 - John_dydx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接