垂直打印R矢量

h4cxqtbf  于 2023-05-20  发布在  其他
关注(0)|答案(6)|浏览(126)

我正在做一个分析,我想改变打印的数据从水平到垂直。例如,当我执行以下操作时,以下是我当前看到的输出类型:

> 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

有没有办法做到这一点?

jogvjijk

jogvjijk1#

尝试:

cat(vector, sep = "\n")

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

jqjz2hbq

jqjz2hbq2#

可以使用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(),如果返回值仅在一行上,则将得到一个向量,因此可能需要使用不同的函数进行计算。

oyt4ldly

oyt4ldly3#

尝试:

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。

sc4hvdpw

sc4hvdpw4#

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
2w2cym1i

2w2cym1i5#

某些输出函数具有选项flip,例如stargazer(用于汇总统计)。这也可能对你有帮助。

blpfk2vs

blpfk2vs6#

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

相关问题