使用 unique(data.table) 或 distinct (dplyr) 和部分 gsub 删除行
Removing rows using unique(data.table) or distinct (dplyr) and partial gsub
我有一个数据集,可以说是 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 或 distinct 时,它会保留 1 个苹果,这会导致 DT2 出现问题,因为即使我的 apple 位置属于 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 中有一个 apple 位置。我不知道它的位置,是在 XXX 市还是在 YYY。这就是为什么我需要删除 DT1 中的所有 apple 行,但据我所知,unique 或 distincts 函数不允许我始终保留第一行。
这就是我想要实现的目标
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
除此之外,一些出生地值包括标点符号,例如 apple st. 我试图将其拆分并让 apple 与 gsub("^(st.)*$","",dt2$birthplace)
分开,但它也没有任何作用对这些人有什么建议吗?
使用 dplyr
您可以通过计算列 places
:
中出现的所有次数来删除所有 "apples"
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
选项data.table
library(data.table)
DT1[, if(.N == 1) .SD, places][DT2, on = .(places = birthplace), nomatch = 0]
我有一个数据集,可以说是 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 或 distinct 时,它会保留 1 个苹果,这会导致 DT2 出现问题,因为即使我的 apple 位置属于 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 中有一个 apple 位置。我不知道它的位置,是在 XXX 市还是在 YYY。这就是为什么我需要删除 DT1 中的所有 apple 行,但据我所知,unique 或 distincts 函数不允许我始终保留第一行。
这就是我想要实现的目标
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
除此之外,一些出生地值包括标点符号,例如 apple st. 我试图将其拆分并让 apple 与 gsub("^(st.)*$","",dt2$birthplace)
分开,但它也没有任何作用对这些人有什么建议吗?
使用 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
选项data.table
library(data.table)
DT1[, if(.N == 1) .SD, places][DT2, on = .(places = birthplace), nomatch = 0]