使用R语言aggregate函数生成统计表格后如何正确设置列名?
解决aggregate多统计量输出的列名设置问题
当用aggregate同时计算多个统计量时,比如这段代码:
temp<-aggregate(AUClast~RIC+STUD, nca_sim[!is.na(nca_sim$RIC),], FUN= function(x) c(N=length(x), Mean=mean(x), SD=sd(x), Median=median(x), Min=min(x), Max=max(x) ))
打印时看起来是8列(2个分组列+6个统计量列),但实际aggregate返回的结果只有3列——前两列是分组变量,第三列是存储所有统计量的矩阵。这时候直接设置8个列名就会报错:
colnames(temp) <-c("Renal Function", "Study", "N", "Mean", "SD", "Median", "Min", "Max") # 报错信息: # Error in names(x) <- value : # 'names' attribute [8] must be the same length as the vector [3]
解决方法
需要把第三列的矩阵拆分成单独的列,再合并到分组列中,之后就能正常设置列名。有两种简单的实现方式:
方式一:拆分合并法
# 把统计量矩阵转成数据框 stats_cols <- as.data.frame(temp$AUClast) # 合并分组列和统计量列 final_table <- cbind(temp[, c("RIC", "STUD")], stats_cols) # 设置列名 colnames(final_table) <- c("Renal Function", "Study", "N", "Mean", "SD", "Median", "Min", "Max")
方式二:一步转换法
用do.call(data.frame, temp)直接把aggregate的结果转换成完整的8列数据框,再设置列名:
temp <- aggregate(AUClast~RIC+STUD, nca_sim[!is.na(nca_sim$RIC),], FUN= function(x) c(N=length(x), Mean=mean(x), SD=sd(x), Median=median(x), Min=min(x), Max=max(x) )) # 转换为标准数据框 final_table <- do.call(data.frame, temp) # 设置列名 colnames(final_table) <- c("Renal Function", "Study", "N", "Mean", "SD", "Median", "Min", "Max")
处理完之后,final_table就是标准的8列数据框,可以直接传入kable生成格式化表格。
内容的提问来源于stack exchange,提问作者CodeMaster
相关产品推荐
相关产品推荐

