繁体   English   中英

如何验证一组变量是否唯一标识 dplyr/tidyverse 中的数据?

[英]How do you verify whether a set of variables uniquely identifies the data in dplyr/tidyverse?

dplyr 是否有办法验证给定的一组变量是否唯一标识 pipe 中的数据? 这对于验证数据在我认为它们在合并之前的级别是唯一的等很有用。

例如,此数据集由变量 v 和 z 唯一标识。

myData <- tibble(
    v=c(1, 1, 2, 3, 4), 
    z=c(0, 1, 1, 1, 1), 
    y=rnorm(5)
)

我希望能够在对 pip 进行操作后验证 v 和 z 唯一标识数据。 例如:

myData %>%
    mutate(y_squared=y^2) %>%
    verify(any(duplicated(c('v', 'z')))==0)

但是这个的各种迭代会引发不同的错误。 在此先感谢您的帮助。

这是使用add_count的一种可能性:

myData %>%
  add_count(v, z) %>%
  filter(n != 1)

这显示了重复的行:

myData %>%
    mutate(y_squared=y^2) %>%
    filter(duplicated(.[ ,c("v", "z")]))

或者您可以签入基础 R:

length(unique(paste(myData$v, myData$z))) == nrow(myData)

如果要使用管道语句:

library(tidyverse)

myData <- tibble(
    v=c(1, 1, 2, 3, 4), 
    z=c(0, 1, 1, 1, 1), 
    y=rnorm(5) )

myData %>% summarize(is_v_z_unique = length(unique(paste(.$v, .$z))) == nrow(myData))
#> # A tibble: 1 x 1
#>   is_v_z_unique
#>   <lgl>        
#> 1 TRUE

如果你只想要 1(对于 TRUE)和 0(对于 FALSE),这就是它的样子:

library(tidyverse)

myData <- tibble(
    v=c(1, 1, 2, 3, 4), 
    z=c(0, 1, 1, 1, 1), 
    y=rnorm(5) )

myData %>% summarize(is_v_z_unique = length(unique(paste(.$v, .$z))) == nrow(myData)) %>% 
    unlist() %>% as.numeric() 
#> [1] 1

代表 package (v0.3.0) 于 2021 年 1 月 6 日创建

我会使用基本 R 的anyDuplicated (它返回重复的数量,所以我们将它与 0 进行比较)。

myData %>%
    {anyDuplicated(select(., v, z)) == 0}
# TRUE

如果这些列中没有重复,它将返回TRUE ,如果有重复,它将返回FALSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM