垂直打印R矢量

Pea*_*oto 12 r

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

> with(mtcars,sapply(split(mpg,cyl),mean))
       4        6        8 
26.66364 19.74286 15.10000 
Run Code Online (Sandbox Code Playgroud)

我希望输出组织如下:

4    26.66364
6    19.74286
8    15.10000
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ven 7

你可以用stack(),

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

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

aggregate(mpg ~ cyl, mtcars, mean)
#  cyl      mpg
#1   4 26.66364
#2   6 19.74286
#3   8 15.10000
Run Code Online (Sandbox Code Playgroud)

而且,如果你走这条路,tapply()可能比sapply()你更合适.

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

有了sapply(),你会得到一个矢量,如果返回值只有一行,所以你可能需要使用不同的功能进行计算.


42-*_*42- 5

尝试:

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

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

as.data.frame( with(mtcars,sapply(split(mpg,cyl),mean)) )
Run Code Online (Sandbox Code Playgroud)

但是列的名称会很难看,IMO。


rns*_*nso 5

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
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试:

cat( paste( vector, collapse='\n' ) )
Run Code Online (Sandbox Code Playgroud)

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

  • 更简单:`cat(vector,sep =“ \ n”)` (7认同)
  • @Scarabee 的评论实际上应该是答案。 (2认同)
  • 不幸的是,这会删除名称,这是OP想要的信息(即变量“cyl”)。更改为“cat(x, labels=names(x), fill=1)”将保留名称,但如果这些名称字符串没有相同数量的字符,则输出将不会对齐。 (2认同)