使用unique(data.table)或different(dplyr)和部分gsub删除行。

问题描述 投票:0回答:1

我有一个数据集让我们说DT1到它。DT1有2列,城市和地点。我将DT1与另一个数据集(DT2)进行匹配,以填补缺失的城市值。但正如你所看到的,有些地方是在不同的城市,但名称相同。我想删除这些地方,然后用 DT2 匹配其他地方。这是我的DT1。

DT1 <- data.table::data.table(city = c("XXX", "XXX", "YYY","ZZZ"),
 places= c("apple","orange","apple","pineapple"))

#> City     BirthPlace
#> XXX      apple
#> XXX      orange
#> YYY      apple
#> ZZZ      pineapple

当我使用unique或different时,它保留了其中的一个苹果,这在DT2中会造成问题,因为即使我的 地方属于YYY,它将XXX粘贴到DT2中的城市栏。

这里是DT2的一个例子

DT2 <- data.table::data.table(zipcode = c("00001","00002","00003","00004"),
                  birthplace= c("apple","orange","pineapple","grapes")

#> ZipCode  BirthPlace
#> 00001      apple
#> 00002      orange
#> 00003      pineapple
#> 00004      grapes

如你所见,我有一个 在DT2的地方。我不知道它的位置,是在XXX市还是在YYY。所以我需要把所有的 行在DT1,但独特的或独特的功能不允许我,据我所知,他们总是保持第一行。

这是我想实现的

DT3 <- data.table::data.table(city = c("XXX","ZZZ"),
                  birthplace= c("orange","grapes"),
                  zipcode = c("00002","00004")
#>  City BirthPlace ZipCode
#>   XXX    orange  00002
#>   ZZZ    grapes  00004

此外,一些出生地的数值还包括标点符号,如 苹果街 我试着把这个拆开,让苹果单独与。 gsub("^(st.)*$","",dt2$birthplace) 但它也没有工作任何建议,这家伙?

r data.table unique distinct gsub
1个回答
2
投票

一个选项与 data.table

library(data.table)
DT1[, if(.N == 1) .SD, places][DT2, on = .(places = birthplace), nomatch = 0]

1
投票

使用 dplyr 您可以通过计算列中所有出现的次数来删除所有 "苹果"。places:

DT1 %>%
  group_by(places) %>%
  filter(n() == 1)

这给你

# A tibble: 2 x 2
# Groups:   places [2]
  city  places   
  <chr> <chr>    
1 XXX   orange   
2 ZZZ   pineapple

合并两个Data.Tables

merge(DT1, DT2, by.x="places", by.y="birthplace")

产量

     places city zipcode
1    orange  XXX   00002
2 pineapple  ZZZ   00003
© www.soinside.com 2019 - 2024. All rights reserved.