R程序问题

时间:2018-11-14 19:10:02

标签: r

我正在尝试获得两个变量的一些独特组合。
对于每个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(),但这对这种情况没有帮助。 谢谢!

2 个答案:

答案 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创建