R 中按列删除重复行
-
使用
dplyr
包的distinct
函数按列删除 R 中的重复行 -
在 R 中使用
group_by
、filter
和duplicated
函数按列删除重复行 -
在 R 中使用
group_by
和slice
函数按列删除重复行
本文将介绍如何在 R 中逐列删除重复行。
使用 dplyr
包的 distinct
函数按列删除 R 中的重复行
dplyr
包提供了 distinct
函数,这是 R 语言中最常用的数据操作库之一。distinct
在给定的数据框中选择唯一的行。它将数据框作为第一个参数,然后是选择过程中需要考虑的变量。可以提供多个列变量来过滤唯一行,但在以下代码片段中,我们演示了单个变量示例。第三个参数是可选的,具有默认值 - FALSE
,但如果用户明确传递 TRUE
,该函数将在过滤后保留数据框中的所有变量。请注意,dplyr
使用名为管道的运算符函数 - %>%
,它被解释为提供左变量作为右函数的第一个参数。即,x %?% f(y)
符号变为 f(x, y)
。
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% distinct(id, .keep_all = TRUE)
t2 <- df1 %>% distinct(gender, .keep_all = TRUE)
t3 <- df1 %>% distinct(variant, .keep_all = TRUE)
df2 <- mtcars
tmp1 <- df2 %>% distinct(cyl, .keep_all = TRUE)
tmp2 <- df2 %>% distinct(mpg, .keep_all = TRUE)
在 R 中使用 group_by
、filter
和 duplicated
函数按列删除重复行
按列值删除重复行的另一种解决方案是将数据框与列变量分组,然后使用 filter
和 duplicated
函数过滤元素。第一步是使用 group_by
函数完成的,该函数是 dplyr
包的一部分。接下来,前一个操作的输出被重定向到 filter
函数以消除重复的行。
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% group_by(id) %>% filter (! duplicated(id))
t2 <- df1 %>% group_by(gender) %>% filter (! duplicated(gender))
t3 <- df1 %>% group_by(variant) %>% filter (! duplicated(variant))
df2 <- mtcars
tmp3 <- df2 %>% group_by(cyl) %>% filter (! duplicated(cyl))
tmp4 <- df2 %>% group_by(mpg) %>% filter (! duplicated(mpg))
在 R 中使用 group_by
和 slice
函数按列删除重复行
或者,可以将 group_by
函数与 slice
一起使用,以按列值删除重复的行。slice
也是 dplyr
包的一部分,它按索引选择行。有趣的是,当数据框被分组时,slice
将选择每个组中给定索引上的行,如以下示例代码所示。
library(dplyr)
df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
variant = c("a", "b", "c", "d", "e", "f", "g", "h"))
t1 <- df1 %>% group_by(id) %>% slice(1)
t2 <- df1 %>% group_by(gender) %>% slice(1)
t3 <- df1 %>% group_by(variant) %>% slice(1)
df2 <- mtcars
tmp5 <- df2 %>% group_by(cyl) %>% slice(1)
tmp6 <- df2 %>% group_by(mpg) %>% slice(1)
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn