【问题标题】:Using distinct() function in R在 R 中使用 distinct() 函数
【发布时间】:2020-10-25 22:53:22
【问题描述】:

我正在处理一个包含经度和纬度坐标的大型数据框,每个坐标都位于不同的列中。只有当它具有相同的经度和纬度时,我才想删除每个重复的行。这能解决问题吗?

distinct(dat, dat$longitude, dat$latitude, .keep_all = TRUE)

这似乎可行,但我不确定我是要删除仅匹配经度和不同纬度的行还是相反。

【问题讨论】:

  • 你可以做distinct(dat, longitue, latitude, .keep_all = TRUE)
  • 根据 akrun 的建议,只要您在 dplyr(和其他 tidyverse 包)函数中工作,通常不应引用 frame 变量本身。这意味着在您的distinct(dat, dat$longitude) 中,删除对dat$ 的所有引用,这样您就会得到akrun 的建议。虽然在此示例中没有该更改也可以正常工作,但如果您执行任何更改前面dplyr 动词中数据的顺序、值或大小的操作(例如,filtergroup_bymutate),那么您要使用的数据与dat$... 提供给您的数据不同。

标签: r dataframe dplyr tidyverse data-cleaning


【解决方案1】:

假设你的意思是dplyr::distinct,用一个玩具例子来测试这个很容易:

dat <- data.frame(longitude = c(1, 2, 3, 1, 2, 3),
                  latitude = c(10, 11, 12, 10, 12, 10))
dat
#>   longitude latitude
#> 1         1       10
#> 2         2       11
#> 3         3       12
#> 4         1       10
#> 5         2       12
#> 6         3       10

dplyr::distinct(dat, longitude, latitude, .keep_all = TRUE)
#>   longitude latitude
#> 1         1       10
#> 2         2       11
#> 3         3       12
#> 4         2       12
#> 5         3       10

您可以看到它只删除了 两个 变量重复的行。

顺便说一下,您可能想再次查看您自己的代码在此数据集上的结果:

distinct(dat, dat$longitude, dat$latitude, .keep_all = TRUE)
#>   longitude latitude dat$longitude dat$latitude
#> 1         1       10             1           10
#> 2         2       11             2           11
#> 3         3       12             3           12
#> 4         2       12             2           12
#> 5         3       10             3           10

正如 Akrun 所指出的,您不想在使用 tidy 评估时包含 dat$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2022-12-15
    • 2013-09-15
    • 2015-02-25
    相关资源
    最近更新 更多