![](/img/trans.png)
[英]How do you filter out data in the first group based data in the second group in dplyr and/or 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.