根据R中其余部分的唯一性汇总一列

时间:2018-05-16 18:19:32

标签: r shiny aggregate

我想基于其余列的唯一性来聚合freq列。 我通常使用

$scope.openAttachment = function (attachment) {
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveOrOpenBlob(
      b64toBlob(attachment.attachment, attachment.mimeType),
      attachment.filename
    );
  }
};

但在这种情况下,变量将是未知的,因为用户将使用闪亮的

下拉选择变量
 aggregate(freq~var1+var2+var3, df, sum)

所以在我的情况下,用户会选择前四列中的任何一列,例如,某人可能只选择疾病,然后我需要按疾病汇总频率,有人可能会选择疾病和性别等等

2 个答案:

答案 0 :(得分:1)

用户提供要聚合为矢量的列名:

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

您可以通过这些列在数据框中创建唯一的向量

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

继续并按唯一列汇总:

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

答案 1 :(得分:1)

考虑使用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