Нахождение парных значений для той же переменной в R - PullRequest
2 голосов
/ 12 апреля 2019

Я более крупный биолог, пытающийся выучить Р., и у меня есть следующий набор данных:

set group 
A    10
B    10 
A    11
A    11
A    34
B    34
B    67 


Я пытаюсь вытащить все пары, где группы идентичны, но наборы разные. Например, мой идеальный вывод должен выглядеть следующим образом:

set group 
A    10
B    10 
A    34
B    34

Я попробовал следующий код, но не получил то, что искал. Может ли кто-нибудь помочь с этим? Заранее спасибо.

for (i in group) {
    if(set == "A" || (set == "B")) {
      print(set)

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019

Вот вариант с dplyr, где мы группируем по 'group', а затем filter, чтобы сохранить количество различных элементов 'set', равным 2

library(dplyr)
df1 %>%
  group_by(group) %>% 
  filter(n_distinct(set) == 2)
# A tibble: 4 x 2
#  set   group
#  <chr> <int>
#1 A        10
#2 B        10
#3 A        34
#4 B        34

data

df1 <- structure(list(set = c("A", "B", "A", "A", "A", "B", "B"),
  group = c(10L, 
  10L, 11L, 11L, 34L, 34L, 67L)), class = "data.frame", row.names = c(NA, 
 -7L))
1 голос
/ 12 апреля 2019

Также возможна dplyr:

df %>%
 group_by(group) %>%
 filter(n() == 2 & any(set != first(set)))

  set   group
  <chr> <int>
1 A        10
2 B        10
3 A        34
4 B        34
1 голос
/ 12 апреля 2019

Мы можем положиться на базу R

> do.call(rbind, lapply(split(dat, dat$group), function(x) x[length(unique(x$set))==2]))
     set group
10.1   A    10
10.2   B    10
34.5   A    34
34.6   B    34
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...