【问题标题】:R - Finding duplicates of words that are in a reversed orderR - 查找顺序相反的单词的重复项
【发布时间】:2021-04-05 20:35:51
【问题描述】:

我有一个 data.table,其中有一列包含职业头衔名称。我想找出重复的职业,但以相反的顺序编写(例如作家广告和广告作家)。 这是我的数据的简化版本以及我想要得到的结果

data = data.table(
  ID = as.character(c("advertisings writer","writer advertisings","setter","drill setter","setter drill","agent claims","claims agent","engineer"))
)
data_result = data.table(
  ID = as.character(c("advertisings writer","setter","drill setter","agent claims","engineer"))
)

这是我一直在使用的代码。

data[,b:= strsplit(ID," ")]

data <- data[,.(b=unlist(b)),by = setdiff(names(data),'b')]
setorderv(data,cols=c("ID","b"))
data <- data[,bb:=list(list(unique(b))),by="ID"][,.SD[1],by=c("ID"),.SDcols=c("bb")]
data[,b:=lapply(bb,paste,collapse=' ')]
data[,b:=unlist(b)]

unique(data,by="b")

由于我正在处理相当大的数据集,这种方法非常耗时。

谢谢

【问题讨论】:

    标签: r duplicates data.table text-database


    【解决方案1】:

    data.table 的可能解决方案:

    1. 将字符串拆分为单词
    2. 对单词进行排序
    3. 粘贴已排序的单词
    4. 获取唯一值
    library(data.table)
    
    data[,ID:=sapply(sapply(stringr::str_split(ID,' '),sort),function(x) paste(x,collapse=' '))]
    unique(data)
    
                        ID
    1: advertisings writer
    2:              setter
    3:        drill setter
    4:        agent claims
    5:            engineer
    

    【讨论】:

    • 这非常适合 Waldi,谢谢!相当高效,非常简洁
    【解决方案2】:

    这是一个igraph 选项

    library(dplyr)
    library(igraph)
    
    data[, TO := gsub("(\\w+)\\s(\\w+)", "\\2 \\1", ID)] %>%
      graph_from_data_frame(directed = FALSE) %>%
      get.data.frame() %>%
      unique() %>%
      subset(select = from)
    

    给了

                     from
    1 advertisings writer
    3              setter
    4        drill setter
    6        agent claims
    8            engineer
    

    【讨论】:

    • 感谢托马斯的回答!我想过这个问题,但问题是某些标题可能有两个以上的单词
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多