我读了一个CSV文件到R data.frame。有些行在其中一列中有相同的元素。我想删除该列中重复的行。例如:
platform_external_dbus 202 16 google 1
platform_external_dbus 202 16 space-ghost.verbum 1
platform_external_dbus 202 16 localhost 1
platform_external_dbus 202 16 users.sourceforge 8
platform_external_dbus 202 16 hughsie 1
我只需要其中一行,因为其他的在第一列中有相同的数据。
dplyr包中的distinct()函数执行任意重复删除,可以从特定列/变量中删除(如本问题中所示),也可以考虑所有列/变量。Dplyr是潮汐宇宙的一部分。
数据和包装
library(dplyr)
dat <- data.frame(a = rep(c(1,2),4), b = rep(LETTERS[1:4],2))
删除在特定列中重复的行(例如,columna)
注意.keep_all = TRUE保留所有列,否则只保留列a。
distinct(dat, a, .keep_all = TRUE)
a b
1 1 A
2 2 B
删除与其他行完全重复的行:
distinct(dat)
a b
1 1 A
2 2 B
3 1 C
4 2 D
删除数据帧的重复行
library(dplyr)
mydata <- mtcars
# Remove duplicate rows of the dataframe
distinct(mydata)
在这个数据集中,没有一个重复的行,所以它返回与mydata中相同的行数。
基于一个变量删除重复行
library(dplyr)
mydata <- mtcars
# Remove duplicate rows of the dataframe using carb variable
distinct(mydata,carb, .keep_all= TRUE)
.keep_all函数用于保留输出数据帧中的所有其他变量。
基于多个变量删除重复行
library(dplyr)
mydata <- mtcars
# Remove duplicate rows of the dataframe using cyl and vs variables
distinct(mydata, cyl,vs, .keep_all= TRUE)
.keep_all函数用于保留输出数据帧中的所有其他变量。
(来源:http://www.datasciencemadesimple.com/remove-duplicate-rows-r-using-dplyr-distinct-function/)
sqldf:
# Example by Mehdi Nellen
a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)
解决方案:
library(sqldf)
sqldf('SELECT DISTINCT * FROM df')
输出:
a b
1 A 1
2 A 2
3 B 4
4 B 1
5 C 2
对于那些来这里寻找重复行删除的一般答案的人,请使用!duplicate ():
a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)
duplicated(df)
[1] FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE
> df[duplicated(df), ]
a b
2 A 1
6 B 1
8 C 2
> df[!duplicated(df), ]
a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2
回答:从R数据帧中删除重复的行
默认情况下,该方法将保留每个副本的第一次出现。您可以使用fromLast = TRUE参数来保留每个重复项的最后一次出现。在此步骤之前,您可以对数据进行排序,以便保留所需的行。
一般的答案可以是
例如:
df <- data.frame(rbind(c(2,9,6),c(4,6,7),c(4,6,7),c(4,6,7),c(2,9,6))))
new_df <- df[-which(duplicated(df)), ]
输出:
X1 X2 X3
1 2 9 6
2 4 6 7