df <- data.frame(age=c(10,10,20,20,25,25,25),veg=c(0,1,0,1,1,0,1))
g=ggplot(data=df,aes(x=age,y=veg))
g=g+stat_summary(fun.y=mean,geom="point")
Run Code Online (Sandbox Code Playgroud)
点反映了每个年龄的蔬菜的平均值,这是我预期的并且希望在使用以下命令更改轴限制后保留.
g=g+ylim(0.2,1)
Run Code Online (Sandbox Code Playgroud)
遗憾的是,使用上述命令更改轴限制会导致从数据中删除veg == 0子集,从而产生
"警告消息:删除了包含缺失值的4行(stat_summary)"
这很糟糕,因为现在数据图(stat_summary mean)省略了veg == 0点.如何防止这种情况?我只是想避免显示绘图的空白部分 - 纵坐标从0到.2,但不删除stat_summary计算中的相关数据.
使用position_jitter可以创建随机抖动,以防止数据点过度绘制.
在下面我用棒球统计的例子来说明我的问题.当我用两个图层绘制相同的数据时,相同的抖动调用会使geoms有点不同.这是有道理的,因为它可能会在两次调用中独立地生成随机抖动,但会产生您在下面的图表中看到的问题.
p=ggplot(baseball,aes(x=round(year,-1),y=sb,color=factor(lg)))
p=p+stat_summary(fun.data="mean_cl_normal",position=position_jitter(width=3,height=0))+coord_cartesian(ylim=c(0,40))
p+stat_summary(fun.y=mean,geom="line",position=position_jitter(width=3,height=0))
Run Code Online (Sandbox Code Playgroud)
虽然错误条点和线引用相同的数据,但它们是脱节的 - 线和点不连接.
有解决办法吗?我认为位置闪避可能是答案,但它似乎不适用于这些类型的情节.或者,也许有一些方法可以让mean_cl_normal调用也添加行? 替代文字http://img339.imageshack.us/img339/1807/screenshot20100702at943.png
我需要通过一些变量来总结数据框,忽略其他变量.这有时被称为崩溃.例如,如果我有这样的数据帧:
Widget Type Energy
egg 1 20
egg 2 30
jap 3 50
jap 1 60
Run Code Online (Sandbox Code Playgroud)
然后由Widget折叠,使用Energy的因变量Energy~Widget会产生
Widget Energy
egg 25
jap 55
Run Code Online (Sandbox Code Playgroud)
在Excel中,最接近的功能可能是"数据透视表",我已经研究了如何在python中实现它(http://alexholcombe.wordpress.com/2009/01/26/summarizing-data-by-combinations-of-变量 -with -python /),这是R使用doBy库做一些非常相关的事情的例子(http://www.mail-archive.com/r-help@r-project.org/msg02643.html),但有一个简单的方法来做到这一点?甚至更好的是ggplot2库中是否有任何内容可以创建在某些变量中崩溃的图?
使用R的内置ToothGrowth示例数据集,这适用于:
ddply(ToothGrowth, .(supp,dose), function(df) mean(df$len))
Run Code Online (Sandbox Code Playgroud)
但我想将子集因子变为变量,例如
factor1 = 'supp'
factor2 = 'dose'
ddply(ToothGrowth, .(factor1,factor2), function(df) mean(df$len))
Run Code Online (Sandbox Code Playgroud)
这不起作用.该怎么做?
我想也许是这样的:
factorCombo = paste('.(',factor1,',',factor2,')', sep='')
ddply(ToothGrowth, factorCombo, function(df) mean(df$len))
Run Code Online (Sandbox Code Playgroud)
但它也不起作用.我认为我很接近,但不确定正确的做法.我想整个命令可以放入一个字符串,然后是字符串的eval()调用,但希望有更优雅的方法吗?
op <- options(warn=0) #although doesn't work for any value of warn
assign("last.warning", NULL, envir = baseenv())
thisDoesntWork<- function() {
warning("HEY, this is definitely a warning!")
cat(paste("number of warnings:",length(warnings())))
}
>thisDoesntWork()
Warning in thisDoesntWork() : HEY, this is definitely a warning!
number of warnings: 0
Run Code Online (Sandbox Code Playgroud)
警告的数量应该是1而不是0 - warnings()
如果在函数内调用,它似乎不返回任何内容.为什么?如果警告发生,如何解决这个问题并将其打印出来?
我不想使用tryCatch
,因为那时我失去了函数返回的值(它可能仍然返回一个有效值,即使它生成了一个警告).
当我们在R中拟合统计模型时,比如说
lm(y ~ x, data=dat)
Run Code Online (Sandbox Code Playgroud)
我们使用R的特殊公式语法:"y~x"
是否存在从这样的公式转换为相应的公式的东西?在这种情况下,它可以写成:
y = B0 + B1*x
Run Code Online (Sandbox Code Playgroud)
这将非常有用!首先,因为有更复杂的公式,我不相信我的翻译.其次,在用R/Sweave/knitr编写的科学论文中,有时候模型应该以方程式形式报告,并且为了完全可重复的研究,我们希望以自动化方式进行.
有关R中可用的行结束和行连接样式的说明,请参阅 http://students.washington.edu/mclarkso/documents/line%20styles%20Ver2.pdf
对于ggplot,我已经在plot_theme()中搜索了ggplot2的github列表并选择了https://github.com/hadley/ggplot2/wiki/%2Bopts%28%29-List但是没有找到任何线索,所以我认为它是不可能在ggplot中更改这些.
我想要一个函数,当传递一个只包含字母的字符串时,将字符串中的每个字母通过字母表旋转X个字符,其中X是函数的参数.这个着名的例子是当X = 13时,称为ROT-13
函数< - ROTx(str,x){ ?? }
这是我期望R精灵可以在几行中完成的事情,而我最终会有10个或更多.
library(ggplot2)
p <- ggplot(mtcars, aes(x=mpg, y=wt*1000, color = factor(cyl))) + geom_point()
p + ylab("weight (lb)") +theme_bw()
Run Code Online (Sandbox Code Playgroud)
我想将5000,4000,3000和2000移近垂直轴.我知道可以使用theme(axis.title.y=element_text(vjust=0.36,hjust=.36))
或类似地将轴标题移动得更远,但有时我真的想要移动刻度标签,而不是轴标题.
Ggplot2允许为曲线添加误差条.要为您计算误差条限制,它会包装来自Hmisc的函数.例如,要引导,可以使用mean_cl_boot选项:
m <- ggplot(mtcars, aes(x=cyl, y=am)) + stat_summary(fun.y=mean,geom="point")
m2 <- m + stat_summary(fun.data = "mean_cl_boot", geom = "errorbar", conf.int=.95)
m2
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要编写自定义函数来计算错误条限制呢?如何编写函数以从stat_summary调用中调用?
感谢Hadley的plyr包ddply函数,我们可以获取一个数据帧,按因子将其分解为子数据帧,将每个数据发送到一个函数,然后将每个子数据帧的函数结果组合成一个新的数据帧.
但是如果函数返回像glm这样的类的对象,或者在我的情况下,返回ac("glm","lm").那么,这些不能组合成数据帧吗?我得到了这个错误
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("glm", "lm")' into a data.frame
Run Code Online (Sandbox Code Playgroud)
是否有一些更灵活的数据结构可以容纳我的函数调用的所有复杂的glm类结果,保留有关数据框子集的信息?
或者这应该以完全不同的方式完成?