Как разделить группы строк с помощью dplyr - PullRequest
2 голосов
/ 08 апреля 2020

У меня есть аналогичные данные, и я хочу получить точный результат, как указано в этой ссылке: Как разделить группы строк с помощью dplyr?

Однако единственное отличие с моими данными в том, что иногда столбец «условие» не имеет «А» или «В» все время, поэтому иногда нет знаменателя или числителя.

x <- data.frame(
    name = rep(letters[1:4], each = 2),
    condition = rep(c("A", "B"), times = 4),
    value = c(2,10,4,20,8,40,20,100)
) 
x = x[-c(4,5),] #this is my dataframe

Я хочу удалить строки, которые не всегда имеют A и B, и продолжить разделение. Может кто-нибудь показать мне, как сделать это на основе этого кода?

x %>% 
  group_by(name) %>%
  summarise(value = value[condition == "B"] / value[condition == "A"])

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Вы можете удалить группы, которые не имеют «A» или «B», а затем разделить.

library(dplyr)

x %>%
  group_by(name) %>%
  filter(all(c('A', 'B') %in% condition)) %>%
  summarise(value = value[condition == "B"] / value[condition == "A"])

#  name  value
#  <fct> <dbl>
#1 a         5
#2 d         5
0 голосов
/ 08 апреля 2020

Мы можем использовать data.table

library(data.table)
setDT(x)[all(c('A', 'B') %chin% condition), 
    .(value = value[condition == 'B']/value[condition == 'A']), name]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...