【问题标题】:Removing rows with same objects in the data frame删除数据框中具有相同对象的行
【发布时间】:2016-10-13 03:25:07
【问题描述】:

我有大约 800 万行数据框,如下所示:

Trevor Brown Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford Brandon Crawford Kelby Tomlinson Brandon Crawford

Buster Posey Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford Brandon Crawford Kelby Tomlinson Brandon Crawford

.
.
.
.

Trevor Brown Brandon Crawford Starlin Castro Kelby Tomlinson Brandon Crawford Brandon Crawford Kelby Tomlinson Brandon Crawford

很多行都有重复的名称,我希望将其删除。我发现很难对每一行进行矢量化然后检查是否重复,因为它需要很长时间,因为数据框有 800 万行。有没有更快的方法来完成这项任务?

【问题讨论】:

  • 每行有一个字符串吗?
  • 每行 16 个字符串。它是 8 x 800 万的数据帧。每行八个全名
  • 你可以试试applyunique
  • 那么什么样的apply函数(如lapply、rapply、sapply等)适合每一行数据框呢?
  • 所以,如果我有这个权利:你有一个 8 列的 data.frame,每列都有一个“first last”名称格式的名称。您想删除名称“重复”的行。是否是“重复”行,其中 8 个名称中的每一个都与另一行相同,并且在相同的列中?也就是说,相同的名称但列顺序不同会是相同的吗?

标签: r


【解决方案1】:

根据我从问题和 cmets 中收集到的信息,我提出了这个解决方案。

require(gtools)
a <- LETTERS[1:8]
data <- permutations(n = 8, r = 8, v = a)
tail(data)

#          [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [40315,] "H"  "G"  "F"  "E"  "D"  "A"  "B"  "C" 
# [40316,] "H"  "G"  "F"  "E"  "D"  "A"  "C"  "B" 
# [40317,] "H"  "G"  "F"  "E"  "D"  "B"  "A"  "C" 
# [40318,] "H"  "G"  "F"  "E"  "D"  "B"  "C"  "A" 
# [40319,] "H"  "G"  "F"  "E"  "D"  "C"  "A"  "B" 
# [40320,] "H"  "G"  "F"  "E"  "D"  "C"  "B"  "A" 

这能解决问题吗? (它创建8! 组合,没有字母在任何行中重复两次)

【讨论】:

    【解决方案2】:
    df$unique_names <- " "
    
    for(i in 1:nrow(df)){
        df$unique_names[i]<- paste0(unique(unlist(strsplit(df$names[i]," "))),collapse=" ")
    
    }
    
     df$unique_names
    [1] "Trevor Brown Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford"
    [2] "Buster Posey Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford"
    

    数据

    df <- data.frame(names=c("Trevor Brown Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford Brandon Crawford Kelby Tomlinson Brandon Crawford"
    ,"Buster Posey Chris Coghlan Starlin Castro Kelby Tomlinson Brandon Crawford Brandon Crawford Kelby Tomlinson Brandon Crawford"
    ),stringsAsFactors = F)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2021-06-07
      • 2018-12-07
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多