我有一个数据集让我们说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)
但它也没有工作任何建议,这家伙?
一个选项与 data.table
library(data.table)
DT1[, if(.N == 1) .SD, places][DT2, on = .(places = birthplace), nomatch = 0]
使用 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