识别列表中的重复项,忽略R中的NA值

时间:2018-06-13 14:01:42

标签: r duplicates nan

我在R中有一个类似于以下内容的多维列表:

            Column1  Column2   Column3   Column4
  1         1          2         NA          NA
  2         2          1         1           NA
  3         1          2         1           2
  4         2          NA        NA          1

我想确定每行中是否有重复项,忽略了NA,并返回每个有重复行的索引。

在上面的示例中,第1行和第3行有重复项。我尝试将信息放入矩阵和数据框中,然后计算每个整数的频率,但最后的额外行索引给我带来了问题。

我将不胜感激任何反馈。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用dplyr包(以及整齐的思维方式)。

您的问题询问如何创建索引,这就是我将给您的内容。但请注意,以下代码正在删除非重复项以执行此操作...因此,如果您的目标是删除非重复项或重复项,则可以修改代码。

library(dplyr)

df <- data.frame(
  Column1 = c(1,2,1,2),
  Column2 = c(2,1,2,NA),
  Column3 = c(NA,1,1,NA),
  Column4 = c(NA,NA,2,1),
  stringsAsFactors = FALSE
)
# Column1 Column2 Column3 Column4
# 1       1       2      NA      NA
# 2       2       1       1      NA
# 3       1       2       1       2
# 4       2      NA      NA       1

duplicate_rows <- df %>%
  rowwise() %>%
  mutate(dups = anyDuplicated(na.omit(c(Column1,Column2,Column3,Column4)))) %>%
  ungroup() %>%
  mutate(index = row_number()) %>%
  filter(dups > 0) %>%
  .$index

duplicate_rows
# [1] 2 3