首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过聚合组合数据帧中的矩阵

通过聚合组合数据帧中的矩阵
EN

Stack Overflow用户
提问于 2013-04-25 05:36:01
回答 1查看 784关注 0票数 2

我试图按因子计算分位数,并使用xtable打印出最终的聚合到latex格式。不幸的是,我有一些不稳定的行为。希望有一个干净的解决方案。

要创建示例,请执行以下操作:

代码语言:javascript
复制
tm <- data.frame(f=c("a","b","c"),v=runif(30))
tm$f <- factor(tm$f)
agv <- aggregate(v~f,tm, quantile)

xtable不接受输出agv

代码语言:javascript
复制
xtable(agv)

给出

cols,i+ pos <- do.call("formatC",curFormatArgs)中的错误:要替换的项目数不是替换长度的倍数

即使print(agv)

代码语言:javascript
复制
  f        v.0%       v.25%       v.50%       v.75%      v.100%
1 1 0.002970944 0.253247687 0.571891610 0.766606825 0.986142807
2 2 0.002129951 0.328739086 0.558132094 0.799115979 0.991067470
3 3 0.011059184 0.285322522 0.496035672 0.770908599 0.994420787

因为很明显dim(agv)实际上是[1] 3 2

所以我试着:

代码语言:javascript
复制
cbind(featureName=agv$f, agv$v)

这会导致字符因素因某种原因转换为数字值。

经过一些试验和错误之后,这是我决定的解决方案:

代码语言:javascript
复制
cbind(f=as.character(agv$f), data.frame(agv$v,check.names=F))

这给了我在xtable中想要的结果

代码语言:javascript
复制
\begin{table}[ht]
\centering
\begin{tabular}{rlrrrrr}
  \hline
 & f & 0\% & 25\% & 50\% & 75\% & 100\% \\
  \hline
1 & a & 0.00 & 0.25 & 0.48 & 0.75 & 0.99 \\
  2 & b & 0.00 & 0.28 & 0.46 & 0.74 & 1.00 \\
  3 & c & 0.02 & 0.21 & 0.44 & 0.63 & 1.00 \\
   \hline
\end{tabular}
\end{table}

不管怎么说,我只是好奇是否有一个更干净的解决方案,涉及的线条更少。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 05:41:51

一种稍微直接的方法(虽然在概念上与您已经做的没有太大不同)可能是使用do.call(data.frame, ...)。下面这些对我来说很有用。

代码语言:javascript
复制
xtable(do.call(data.frame, c(agv, check.names = FALSE)))

对我来说,回报是:

代码语言:javascript
复制
> xtable(do.call(data.frame, c(agv, check.names = FALSE)))
% latex table generated in R 3.0.0 by xtable 1.7-1 package
% Thu Apr 25 11:10:26 2013
\begin{table}[ht]
\centering
\begin{tabular}{rlrrrrr}
  \hline
 & f & v.0\% & v.25\% & v.50\% & v.75\% & v.100\% \\ 
  \hline
1 & a & 0.06 & 0.27 & 0.38 & 0.64 & 0.94 \\ 
  2 & b & 0.20 & 0.38 & 0.52 & 0.70 & 0.87 \\ 
  3 & c & 0.01 & 0.22 & 0.60 & 0.87 & 0.99 \\ 
   \hline
\end{tabular}
\end{table}

xtable还可以使用data.table,因此您还可以执行以下操作:

代码语言:javascript
复制
library(data.table)

DT <- data.table(tm, key = "f")
xtable(DT[, as.list(quantile(v)), by = key(DT)])

在这里,DT[, as.list(quantile(v)), by = key(DT)]将给出与"agv“对象相同的结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16207100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档