我在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行有重复项。我尝试将信息放入矩阵和数据框中,然后计算每个整数的频率,但最后的额外行索引给我带来了问题。
我将不胜感激任何反馈。谢谢你的时间。
答案 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