我正在进行分析,我希望将数据打印从水平更改为垂直。例如,当我执行以下操作时,这是我目前看到的输出类型:
> 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
有没有办法实现这个目标?
答案 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