r - применить одно условие к нескольким столбцам - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть датафрейм со многими столбцами, и получение следующего резюме - это много ручной работы. В образце набора данных требуется вычислять сумму столбца value три раза только для наблюдений, в которых значения столбцов «ИСТИНА» отдельно для каждого.

# sample dataset
df <- data.frame(
  value = c(1:20),
  con1 = c("TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE"),
  con2 = c("FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE"),
  con3 = c("FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "FALSE"))

Вручную процесс можно сделать так:

df %>% group_by(con1) %>% summarise(value = sum(value))

В этом случае сумма столбца value для наблюдений, только когда соответствующее значение в столбце con1 равно «ИСТИНА», равна 70.

Конечный кадр данных должен выглядеть следующим образом:

data.frame(con1 = 70, con2 = 63, con3 = 57)  

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете использовать summarise_at для суммирования con столбцов, а для каждого столбца применить его как логический фильтр к столбцу value и суммировать его:

df %>% 
    summarise_at(vars(starts_with('con')), funs(sum(value[as.logical(.)])))

#  con1 con2 con3
#1   70   63   57
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...