如何删除R中的重复行

Dry*_*yad 0 r

我有以下数据

x y z

1 2 a

1 2
Run Code Online (Sandbox Code Playgroud)

数据[2,3]是一个因素,但没有显示,在数据中,它有很多行像这样.如果z什么都没有删除行?我的意思是删除第二行等行.

输出应该是

x y z

1 2 a
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 5

好.在这里黑暗中刺了一下.

想象一下以下数据集:

mydf <- data.frame(
  x = c(.11, .11, .33, .33, .11, .11),
  y = c(.22, .22, .44, .44, .22, .44),
  z = c("a", "", "", "f", "b", ""))
mydf
#      x    y z
# 1 0.11 0.22 a
# 2 0.11 0.22  
# 3 0.33 0.44  
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44  
Run Code Online (Sandbox Code Playgroud)

从你的标题和描述的组合(两者似乎都没有完全描述你的问题),我会解码你想要删除第2行和第3行,但不是第6行.换句话说,你想先检查是否行是重复的(可能只是前两列),然后,如果第三列为空,则删除该行.按照这些说明,第5行应保留(列"z"不为空白),第6行应保留(第1列和第2列的组合不重复).

如果是这种情况,这里有一种方法:

# Copy the data.frame, "sorting" by column "z"
mydf2 <- mydf[rev(order(mydf$z)), ]
# Subset according to your conditions
mydf2 <- mydf2[duplicated(mydf2[1:2]) & mydf2$z %in% "", ]
mydf2
#      x    y z
# 3 0.33 0.44  
# 2 0.11 0.22  
Run Code Online (Sandbox Code Playgroud)

^^这些是我们要删除的数据.删除它们的方法之一是使用setdiffrownames每个数据集的:

mydf[setdiff(rownames(mydf), rownames(mydf2)), ]
#      x    y z
# 1 0.11 0.22 a
# 4 0.33 0.44 f
# 5 0.11 0.22 b
# 6 0.11 0.44  
Run Code Online (Sandbox Code Playgroud)