У меня есть фреймворк с множеством столбцов, и получение следующего резюме - это большая ручная работа. В демонстрационном наборе данных требуется вычислить сумму столбца value три раза только для наблюдений, для каждого из которых значения «con» имеют значение «ИСТИНА».
# 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)





Вы можете использовать summarise_at для суммирования столбцов против и для каждого столбца применить его как логический фильтр к столбцу значение и суммировать его:
df %>%
summarise_at(vars(starts_with('con')), funs(sum(value[as.logical(.)])))
# con1 con2 con3
#1 70 63 57
Вам, вероятно, следует использовать встроенный в R TRUE / FALSE вместо того, чтобы изобретать колесо с помощью «TRUE» / «FALSE».