📜  如何删除 R DataFrame 中的重复行?(1)

📅  最后修改于: 2023-12-03 15:24:04.026000             🧑  作者: Mango

如何删除 R DataFrame 中的重复行?

在使用 R 进行数据分析时,我们经常需要处理数据集中的重复行。这些重复行可能会影响模型的准确性和结果的可靠性,因此需要删除。

使用 dplyr 包来删除重复行

R 语言最流行的数据操作包之一 dplyr 提供了 distinct() 函数来删除数据集中的重复行。该函数可以根据一列或多列的唯一值来确定哪些行是重复的。

library(dplyr)

# 创建一个包含重复行的数据集
df <- data.frame(
  id = c(1, 2, 2, 3, 4, 4, 4),
  name = c("John", "Amy", "Amy", "Mike", "Lisa", "Lisa", "Lisa"),
  score = c(80, 90, 90, 85, 95, 95, 95)
)

# 使用 distinct() 函数删除重复行
df_new <- distinct(df, id, name, .keep_all = TRUE)

输出结果如下:

  id name score
1  1 John    80
2  2  Amy    90
3  3 Mike    85
4  4 Lisa    95

可以看出,重复的行已被删除。

需要注意的是,distinct() 函数默认会保留第一个出现的重复行并删除其余的重复行,这可能会影响结果的准确性。为了保留所有重复行,我们需要在函数中使用 .keep_all = TRUE 参数。

使用 base 包来删除重复行

除了 dplyr 包外,R 语言的 base 包也提供了删除重复行的函数 unique()duplicated()

unique() 函数可以返回数据集中的唯一行,但是并不会删除重复行。我们可以将 unique() 函数的返回值与原数据集进行比较,然后删除重复行。

# 使用 unique() 函数找到唯一行
unique_rows <- unique(df)

# 找到重复行
duplicate_rows <- df[duplicated(df) | duplicated(df, fromLast = TRUE),]

# 删除重复行
df_new <- df[!duplicated(df) & !duplicated(df, fromLast = TRUE),]

可以看出,df_new 数据集中已经删除了所有的重复行。

总结

在 R 语言中,我们可以使用 dplyr 包的 distinct() 函数或 base 包的 unique() 函数和 duplicated() 函数来删除数据集中的重复行。具体选择哪个函数取决于个人习惯和处理数据集的复杂程度。