R вопросы программы - PullRequest
       1

R вопросы программы

0 голосов
/ 14 ноября 2018

Я пытаюсь получить несколько уникальных комбинаций двух переменных.
Для каждого значения 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 голосов
/ 14 ноября 2018

Использование 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

Создано в 2018-11-14 пакетом Представить (v0.2.1)

0 голосов
/ 14 ноября 2018

Сначала мы используем unique, чтобы пропустить повторяющиеся строки с одинаковыми значениями x и y (сохраняя только одну копию каждого). Любые оставшиеся повторяющиеся значения x имеют разные значения y, поэтому мы хотим избавиться от них. Мы используем стандартный способ удаления всех копий любых дублированных значений , как в этом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...