агрегировать один столбец на основе уникального из остальных в R - PullRequest
0 голосов
/ 16 мая 2018

Я хочу агрегировать столбец freq на основе уникальных остальных столбцов.Я обычно использую

 aggregate(freq~var1+var2+var3, df, sum)

, но в этом случае переменные будут неизвестны, так как пользователь будет выбирать переменные, используя выпадающий список в блестящем

DISEASE Gender  Age Race    Date       Freq
Campy       F   32  ASIAN   1/6/2014    10
Campy       M   52  WHITE   1/2/2014    15
Campy       M   63  WHITE   1/3/2014    56
Chlamydia   F   24  LATINO  1/8/2014    32
Chlamydia   F   32  AA      1/3/2014    52

Так что в моем случае пользователь будетвыберите любой из первых четырех столбцов, например, кто-то может просто выбрать болезнь, затем мне нужно агрегировать частоты по болезням, а кто-то может выбрать болезнь и пол, а также

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Рассмотрим динамическую формулу, построенную с paste(..., collapse=...):

dynamic_agg <- function(vars) {
  f <- as.formula(paste0("Freq~", paste(vars, collapse="+")))
  aggregate(f, df, FUN=sum)
}  

dynamic_agg(c("Date"))
#       Date Freq
# 1 1/2/2014   15
# 2 1/3/2014  108
# 3 1/6/2014   10
# 4 1/8/2014   32

dynamic_agg(c("Gender", "Date"))
#   Gender     Date Freq
# 1      M 1/2/2014   15
# 2      F 1/3/2014   52
# 3      M 1/3/2014   56
# 4      F 1/6/2014   10
# 5      F 1/8/2014   32

dynamic_agg(c("DISEASE", "Gender", "Date"))
#     DISEASE Gender     Date Freq
# 1     Campy      M 1/2/2014   15
# 2 Chlamydia      F 1/3/2014   52
# 3     Campy      M 1/3/2014   56
# 4     Campy      F 1/6/2014   10
# 5 Chlamydia      F 1/8/2014   32
0 голосов
/ 16 мая 2018

Пользователь предоставляет имена столбцов для агрегирования в виде вектора:

user.cols <- c("DISEASE",'Age')

Вы создаете уникальный вектор в кадре данных по этим столбцам

df$unq <- apply( df[ , user.cols ] , 1 , paste , collapse = "-" )

и агрегируете по уникальному столбцу:

output <- aggregate(freq~unq, df, sum)
...