r - 使用dataframe中的值重复删除行

时间:2017-07-05 23:53:05

标签: r duplicates

如何在基于另一列的重复项中仅对具有特定列中的值的行进行子集化。

示例:

df

A B  C D 
1 NA 8 7
1 5  8 9
2 6  5 8
2 NA 5 6
3 NA  8 5

所以在上面的数据集中,前4行是基于A和C列的重复,所以在其中,我只想选择B列中有值的行。

期望的输出,

A B C D
1 5 8 9
2 6 5 8
3 NA 8 5

感谢。

3 个答案:

答案 0 :(得分:4)

set hidden3d offset 0上的前后复制而不是丢失;或不重复:

B

或者使用anydup <- duplicated(df[c("A","C")]) | duplicated(df[c("A","C")], fromLast=TRUE) df[(anydup & (!is.na(df$B))) | (!anydup),] # A B C D #2 1 5 8 9 #3 2 6 5 8 #5 3 NA 8 5 根据@ HubertL的dplyr答案检查每组的长度:

ave

答案 1 :(得分:4)

使用dplyr:

df <- read.table(text="A B  C D 
1 NA 8 7
1 5  8 9
2 6  5 8
2 NA 5 6
3 NA  8 5", header=T)


df %>% 
  group_by(A,C) %>% 
  filter(n()==1|!is.na(B))

      A     B     C     D
  <int> <int> <int> <int>
1     1     5     8     9
2     2     6     5     8
3     3    NA     8     5

答案 2 :(得分:2)

以下是data.table

的一个选项
library(data.table)
setDT(df)[df[, .I[.N==1 | complete.cases(B)] , .(A, C)]$V1]
#    A  B C D
#1: 1  5 8 9
#2: 2  6 5 8
#3: 3 NA 8 5