我正在做一个分析,我想改变打印的数据从水平到垂直。例如,当我执行以下操作时,以下是我当前看到的输出类型:
> 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
有没有办法做到这一点?
jogvjijk1#
尝试:
cat(vector, sep = "\n")
这实际上创建了一串矢量元素,并使用换行符打印到控制台。
jqjz2hbq2#
可以使用stack(),
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()
aggregate(mpg ~ cyl, mtcars, mean) # cyl mpg #1 4 26.66364 #2 6 19.74286 #3 8 15.10000
另外,如果你走这条路,tapply()可能比sapply()更适合。
tapply()
sapply()
stack(with(mtcars, tapply(mpg, cyl, mean))) # values ind #1 26.66364 4 #2 19.74286 6 #3 15.10000 8
对于sapply(),如果返回值仅在一行上,则将得到一个向量,因此可能需要使用不同的函数进行计算。
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。
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
2w2cym1i5#
某些输出函数具有选项flip,例如stargazer(用于汇总统计)。这也可能对你有帮助。
flip
blpfk2vs6#
使用dplyr的管道,你还可以:
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
6条答案
按热度按时间jogvjijk1#
尝试:
这实际上创建了一串矢量元素,并使用换行符打印到控制台。
jqjz2hbq2#
可以使用
stack()
,但是
aggregate()
可能更适合这个问题另外,如果你走这条路,
tapply()
可能比sapply()
更适合。对于
sapply()
,如果返回值仅在一行上,则将得到一个向量,因此可能需要使用不同的函数进行计算。oyt4ldly3#
尝试:
默认情况下,矩阵对象将是单列矩阵。您可以用途:
但是专栏的名字会很丑,IMO。
sc4hvdpw4#
data.table封装也可用于垂直输出:
2w2cym1i5#
某些输出函数具有选项
flip
,例如stargazer(用于汇总统计)。这也可能对你有帮助。blpfk2vs6#
使用
dplyr
的管道,你还可以: