R 根据列删除数据帧中的重复行
我有数据帧:R 根据列删除数据帧中的重复行,r,dataframe,R,Dataframe,我有数据帧: df=data.frame(doc_id=c(1, 1, 2, 2), terms=c("virginia","bye","energy","energy"), freq=c(1,1,2,1)) i、 e 我想删除doc_id和terms列中的重复项;例如,第3行和第4行具有相同的文档id和术语字段。但我想保留的副本应该是那些在freq字段中具有最大值的副本。这里有一个slice选项。按“doc_id”、“terms”分组后,用最大值“freq”对行进行切片 library(dp
df=data.frame(doc_id=c(1, 1, 2, 2), terms=c("virginia","bye","energy","energy"), freq=c(1,1,2,1))
i、 e
我想删除doc_id和terms列中的重复项;例如,第3行和第4行具有相同的文档id和术语字段。但我想保留的副本应该是那些在freq字段中具有最大值的副本。这里有一个slice选项。按“doc_id”、“terms”分组后,用最大值“freq”对行进行切片
library(dplyr)
df %>%
group_by(doc_id, terms) %>%
slice(which.max(freq))
# A tibble: 3 x 3
# Groups: doc_id, terms [3]
# doc_id terms freq
# <dbl> <fct> <dbl>
#1 1 bye 1
#2 1 virginia 1
#3 2 energy 2
或者排列整齐、清晰
或者在base R中,首先对数据集进行排序,以便“freq”的最大值将出现在每个组的第一行中,然后使用duplicated删除重复的行
df1 <- df[with(df, order(doc_id, terms, -freq)),]
df1[!duplicated(df1[-3]),]
# doc_id terms freq
#2 1 bye 1
#1 1 virginia 1
#3 2 energy 2
这里有一个slice选项。按“doc_id”、“terms”分组后,用最大值“freq”对行进行切片
library(dplyr)
df %>%
group_by(doc_id, terms) %>%
slice(which.max(freq))
# A tibble: 3 x 3
# Groups: doc_id, terms [3]
# doc_id terms freq
# <dbl> <fct> <dbl>
#1 1 bye 1
#2 1 virginia 1
#3 2 energy 2
或者排列整齐、清晰
或者在base R中,首先对数据集进行排序,以便“freq”的最大值将出现在每个组的第一行中,然后使用duplicated删除重复的行
df1 <- df[with(df, order(doc_id, terms, -freq)),]
df1[!duplicated(df1[-3]),]
# doc_id terms freq
#2 1 bye 1
#1 1 virginia 1
#3 2 energy 2
另一个基本R选项:使用subset+ave 或者使用聚合的更紧凑版本,这要归功于@akrun
dfout <- aggregate(freq ~ ., df, FUN = max)
另一个基本R选项:使用subset+ave 或者使用聚合的更紧凑版本,这要归功于@akrun
dfout <- aggregate(freq ~ ., df, FUN = max)
另一个压缩选项是aggregatefreq~,df,FUN=max另一个压缩选项是aggregatefreq~,df,FUN=max谢谢!但它返回:Error:列术语对于first是未知的solution@Mark您的输入数据集将“terms”显示为列名,并且正在为其工作me@Mark有没有可能您的原始数据集中有不同的列名,因为我无法识别您!但它返回:Error:列术语对于first是未知的solution@Mark您的输入数据集将“terms”显示为列名,并且正在为其工作me@Mark有没有可能您的原始数据集中有不同的列名,因为我无法复制
> dfout
doc_id terms freq
1 1 virginia 1
2 1 bye 1
3 2 energy 2
dfout <- aggregate(freq ~ ., df, FUN = max)
> dfout
doc_id terms freq
1 1 bye 1
2 2 energy 2
3 1 virginia 1