Фильтрация данных по сумме двух строк - PullRequest
0 голосов
/ 17 мая 2019

Я хочу изменить значения в образцах с общим продуктом по строкам менее 5 до нуля, оставив остальные как есть.

Я пробовал:

    dat %>%
      group_by(snpID) %>%
      mutate_at(vars(2:6),
                list(~ifelse(sum(.) < 5, 0, .)))

Результат: (сумма каждой строки заменяет каждую строку)

    dat %>%
      group_by(snpID) %>%
      mutate_at(vars(2:6),
                list(~ifelse(sum(.) < 5, 0, ungroup(.))))

Ошибка:

Ошибка в UseMethod («разгруппировать»): неприменимый метод для ungroup, примененный к объекту класса "c ('integer', 'numeric')"

Оригинал:

snpID   f1  f2  f3  m1  m2  m3
A_001   2   5   2   0   1   3
A_001   0   3   8   2   5   10
A_002   11  5   12  7   0   2
A_002   2   6   5   14  5   3

Что я хочу:

snpID   f1  f2  f3  m1  m2  m3
A_001   0   5   2   0   1   3
A_001   0   3   8   0   5   10
A_002   11  5   12  7   0   2
A_002   2   6   5   14  5   3

Сумма A_001 в f1 и m1 образцов <5, поэтому обе строки возвращаются с нулевым значением. </p>

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 мая 2019

Согласно вашему примеру с набором данных вам нужно сгруппировать по loci, а не snpID.

Написанное вами ifelse() должно работать. Вот альтернатива, которая тоже должна работать:

dat %>% group_by(loci) %>% mutate_at(vars(-loci), list(~replace(., sum(.) < 5, 0)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...