我正在尝试获得两个变量的一些独特组合。
对于每个x值,我都希望具有唯一的y值,并删除具有多个y值的那些值。但是几个x值可以共享相同的y值。
例如,
a=data.frame(x=c(1,1,2,4,5,5),y=c(2,3,3,3,6,6))
,
我想得到如下输出:
b=data.frame(x=c(2,4,5),y=c(3,3,6))
我已经尝试过unique()
,但这对这种情况没有帮助。
谢谢!
答案 0 :(得分:1)
首先,我们使用unique
来省略具有相同x和y值的重复行(每个行仅保留一个副本)。剩下的任何重复的x值具有不同的y值,因此我们希望摆脱它们。我们使用标准方法删除所有重复值as in this R-FAQ的所有副本。
a=data.frame(x=c(1,1,2,4,5,5),y=c(2,3,3,3,6,6))
b = unique(a)
b = b[!duplicated(b$x) & !duplicated(b$x, fromLast = TRUE), ]
b
# x y
# 3 2 3
# 4 4 3
# 5 5 6
dplyr
的粉丝可能会这样做,从而产生相同的结果。
library(dplyr)
a %>%
group_by(x) %>%
filter(n_distinct(y) == 1) %>%
distinct
答案 1 :(得分:1)
使用dplyr
:
library(dplyr)
a <- data.frame(x=c(1,1,2,4,5,5),y=c(2,3,3,3,6,6))
a %>%
distinct() %>%
add_count(x) %>% # adds an implicit group_by(x)
filter(n == 1) %>%
select(-n)
#> # A tibble: 3 x 2
#> # Groups: x [3]
#> x y
#> <dbl> <dbl>
#> 1 2 3
#> 2 4 3
#> 3 5 6
由reprex package(v0.2.1)于2018-11-14创建