垂直打印R矢量

时间:2014-08-09 23:11:43

标签: r

我正在进行分析,我希望将数据打印从水平更改为垂直。例如,当我执行以下操作时,这是我目前看到的输出类型:

> with(mtcars,sapply(split(mpg,cyl),mean))
       4        6        8 
26.66364 19.74286 15.10000 

我希望输出组织如下:

4    26.66364
6    19.74286
8    15.10000

有没有办法实现这个目标?

6 个答案:

答案 0 :(得分:5)

您可以使用stack()

with(mtcars, stack(sapply(split(mpg, cyl), mean)))
#    values ind
#1 26.66364   4
#2 19.74286   6
#3 15.10000   8

aggregate()可能会更好地解决这个问题

aggregate(mpg ~ cyl, mtcars, mean)
#  cyl      mpg
#1   4 26.66364
#2   6 19.74286
#3   8 15.10000

另外,tapply()可能比sapply()更合适,如果你走那条路。

stack(with(mtcars, tapply(mpg, cyl, mean)))
#    values ind
#1 26.66364   4
#2 19.74286   6
#3 15.10000   8

使用sapply(),如果返回值仅在一行上,您将获得一个向量,因此您可能希望使用不同的函数进行计算。

答案 1 :(得分:4)

尝试:

as.matrix( with(mtcars,sapply(split(mpg,cyl),mean)) )
  [,1]
4 26.7
6 19.7
8 15.1

默认情况下,矩阵对象将是单列矩阵。你可以使用:

as.data.frame( with(mtcars,sapply(split(mpg,cyl),mean)) )

但是这个专栏的名字很难看,IMO。

答案 2 :(得分:3)

data.table也可用于垂直输出:

mtcarsdt = data.table(mtcars)

mtcarsdt[,mean(mpg),by=cyl]
   cyl       V1
1:   6 19.74286
2:   4 26.66364
3:   8 15.10000

答案 3 :(得分:3)

尝试:

cat( paste( vector, collapse='\n' ) )

这实际上创建了一个向量元素串,并使用换行符打印到控制台。

答案 4 :(得分:0)

某些输出函数具有选项flip,例如观星者(摘要统计)。这对你也有帮助。

答案 5 :(得分:0)

使用dplyr的管道,您还可以执行以下操作:

mtcars %>% group_by(cyl) %>% summarise(mean(mpg))
# A tibble: 3 x 2
    cyl `mean(mpg)`
  <dbl>       <dbl>
1     4        26.7
2     6        19.7
3     8        15.1