我的数据框如下:
String | Num
---------------------
This is a cat | 15
This is a pet | 14
This is a dog | 10
is | 30
a | 70
is a | 100
is | 200
is a dog | 15
That is a dog | 18
我想得到一个如下表:
This is a cat | 15
This is a pet | 14
This is a dog | 14
That is a dog | 18
基本上删除其他行中已经包含的行(作为子字符串)。
我使用while循环和lapply实现此目的:
calc <- function(e, df){
i <- 1
while (!(grepl(e[[1]],df[i,1], fixed=TRUE, ignore.case = TRUE)) & i <=nrow(df)){
i <- i + 1
}
return (df[i,])
}
reduced <- lapply(input_df[,1], calc, df=input_df)
output_df <- do.call(rbind,reduced)
然后,我只从output_df获得唯一值以获取所需的结果集。
当数据集较小时,这非常有效。但是,对于大型数据集,最多需要12个小时才能获得结果。
注意:我按长度(DESC)对input_df进行排序,以获得最佳性能
有没有一种方法可以优化它?