我正在进行分析,我希望将数据打印从水平更改为垂直.例如,当我执行以下操作时,这是我目前看到的输出类型:
> 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)
有没有办法实现这个目标?
你可以用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(),你会得到一个矢量,如果返回值只有一行,所以你可能需要使用不同的功能进行计算.
尝试:
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。
包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)
这实际上创建了矢量元素的字符串,并以换行符打印到控制台。
| 归档时间: |
|
| 查看次数: |
11473 次 |
| 最近记录: |