删除R数据框中其他行包含的行(作为子字符串)

时间:2019-05-25 05:24:47

标签: r optimization

我的数据框如下:

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进行排序,以获得最佳性能

有没有一种方法可以优化它?

0 个答案:

没有答案