假设有一个线性模型LM,我想要一个残差的qq图.通常我会使用R基础图形:
qqnorm(residuals(LM), ylab="Residuals")
qqline(residuals(LM))
Run Code Online (Sandbox Code Playgroud)
我可以弄清楚如何获得情节的qqnorm部分,但我似乎无法管理qqline:
ggplot(LM, aes(sample=.resid)) +
stat_qq()
Run Code Online (Sandbox Code Playgroud)
我怀疑我遗漏了一些非常基本的东西,但似乎应该有一种简单的方法来做到这一点.
编辑:非常感谢下面的解决方案.我已经修改了代码(非常轻微)以从线性模型中提取信息,以便绘图的工作方式类似于R基础图形包中的便利图.
ggQQ <- function(LM) # argument: a linear model
{
y <- quantile(LM$resid[!is.na(LM$resid)], c(0.25, 0.75))
x <- qnorm(c(0.25, 0.75))
slope <- diff(y)/diff(x)
int <- y[1L] - slope * x[1L]
p <- ggplot(LM, aes(sample=.resid)) +
stat_qq(alpha = 0.5) +
geom_abline(slope = slope, intercept = int, color="blue")
return(p)
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
创建与每个情节不同的注释GGPLOT2一个facet_wrap情节
在GGPLOT2到面的情节,添加文本与X轴日期
偶尔在ggplot中面对数据时,我认为用每个方面的观察数量来注释每个方面会很好.当刻面可能导致每个面的观察相对较少时,这一点尤为重要.
在这个情节的每个方面添加"n = X"的最佳/最简单的方法是什么?
require(ggplot2)
mms <- data.frame(deliciousness = rnorm(100),
type=sample(as.factor(c("peanut", "regular")), 100, replace=TRUE),
color=sample(as.factor(c("red", "green", "yellow", "brown")), 100, replace=TRUE))
plot <- ggplot(data=mms, aes(x=deliciousness)) + geom_density() + facet_grid(type ~ color)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用dplyr执行内部连接两个表,我想我会被非标准的评估规则绊倒.当使用by =("a"="b")参数时,当"a"和"b"是实际字符串时,一切都按预期工作.这是一个有效的玩具示例:
library(dplyr)
data(iris)
inner_join(iris, iris, by=c("Sepal.Length" = "Sepal.Width"))
Run Code Online (Sandbox Code Playgroud)
但是,让我说我将inner_join放在一个函数中:
library(dplyr)
data(iris)
myfn <- function(xname, yname) {
data(iris)
inner_join(iris, iris, by=c(xname = yname))
}
myfn("Sepal.Length", "Sepal.Width")
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Error: cannot join on columns 'xname' x 'Sepal.Width': index out of bounds
我怀疑有一些花哨的表达,贬低,引用或不引用我可以做的工作,但我对这些细节有点模糊.
假设我有一个data.frame,其中一列中的价格和另一列中的年份:
prices <- rnorm(200, mean=10, sd=3)
years <- round(rnorm(200, mean=2006, sd=5))
df <- data.frame(prices, years)
Run Code Online (Sandbox Code Playgroud)
现在说我想用消费者价格指数将所有这些价格标准化为2008美元.我可以去查看转换值并手动进行计算,但我的直觉告诉我,可能有一个自动执行此操作的程序包.搜索r-seek和cran并没有产生任何明显的结果.
有谁知道什么?
我是以编程方式获取一堆数据集,其中许多都有愚蠢的名称,以数字开头,并有特殊字符,如减号.因为没有一个数据集特别大,我希望利益R对数据类型做出最好的猜测,我(ab)使用dplyr将这些表转储到SQLite中.
我使用方括号来逃避可怕的表名,但这似乎不起作用.例如:
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="[14m3-n4m3]")
Run Code Online (Sandbox Code Playgroud)
这会导致错误消息:
Error in sqliteSendQuery(conn, statement, bind.data) : error in statement: no such table: 14m3-n4m3
如果我选择一个合理的名称,这是有效的.但是,由于种种原因,我真的很想保留繁琐的名字.我也可以直接从sqlite创建这样一个命名不好的表:
sqlite> create table [14m3-n4m3](foo,bar,baz);
sqlite> .tables
14m3-n4m3
Run Code Online (Sandbox Code Playgroud)
如果没有深入破解,看起来dplyr正在以某种方式处理方括号,这是我无法弄清楚的.我怀疑这是一个错误,但我想先在这里检查,以确保我没有遗漏一些东西.
编辑:我忘了提到我只是将janky名称直接传递给dplyr的情况.这错误如下:
library(dplyr)
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="14M3-N4M3")
Error in sqliteSendQuery(conn, statement, bind.data) :
error in statement: unrecognized token: "14M3"
Run Code Online (Sandbox Code Playgroud) 我正在建立一个基本的Github托管的Jekyll网站(这么简单,我甚至不打算改变默认主题).我有一个嵌套的网站,其中包含少量的第一层页面,我想在导航栏中显示(即默认的操作模式).我还有一些第二层页面,我不想破坏导航栏.
虽然多级导航系统会很好,但我试图避免使用插件.因此,我认为最简单的解决方案是完全从导航系统中排除第二层页面.
这是一个假设的页面结构(减去其他Jekyll文件):
jekyllsite
jekyllsite/bar
jekyllsite/bar/alice
jekyllsite/bar/alice/index.md
jekyllsite/bar/bob
jekyllsite/bar/bob/index.md
jekyllsite/bar/index.md
jekyllsite/baz
jekyllsite/baz/index.md
jekyllsite/foo
jekyllsite/foo/eggs
jekyllsite/foo/eggs/index.md
jekyllsite/foo/index.md
jekyllsite/foo/spam
jekyllsite/foo/spam/index.md
jekyllsite/index.md
Run Code Online (Sandbox Code Playgroud)
按照令人敬畏的降序排列,这就是我想要这样做的方式:
最好的情况,上下文敏感的导航(没有插件可能不会想到):访问jekyllsite/index.md时,我会得到一个单层导航栏,提供指向foo,bar和baz的链接.访问jekyllsite/bar/index.md时,我会在顶层看到一个包含foo,bar和baz的双层导航栏,第二层包含alice和bob.
下一个最佳选择是让我在全局范围内进行更改,以便只将顶级目录(foo,bar,baz)添加到导航栏.alice,bob,spam和eggs等子目录将自动从导航栏中排除.
最后(我认为这可能是最简单的)将是YAML frontmatter标志来排除页面.类似于nonav: true要排除的页面前端的东西.
这似乎是一个相当常见的用例,尽管我找不到任何看起来像这三个选项中的任何一个的短路径的东西.我希望更熟悉Jekyll的人有一个"阻力最小的道路"的答案.
我有一些数据用于绘制直方图.我也有两组具有一定意义的阈值.
我可以用适当的样式绘制直方图和vlines.但是,我无法让我的vlines显示在图例中.我相信这样的东西应该有用,但是传奇项目不会显示.
df <- data.frame(val=rnorm(300, 75, 10))
cuts1 <- c(43, 70, 90)
cuts2 <- c(46, 79, 86)
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(xintercept=cuts1,
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(xintercept=cuts2,
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
Run Code Online (Sandbox Code Playgroud)
或者,如果我为剪切构建一个data.frame并进行美学映射,我可以让我的vlines显示在图例中.不幸的是,这个图例给了我两个不同线型叠加在一起的实例:
cuts1 <- data.frame(Thresholds="Thresholds A", vals=c(43, 70, 90))
cuts2 <- data.frame(Thresholds="Thresholds B", vals=cuts2 <- c(46, 79, 86))
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(data=cuts1, aes(xintercept=vals, shape=Thresholds),
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(data=cuts2, aes(xintercept=vals, shape=Thresholds),
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
Run Code Online (Sandbox Code Playgroud)

所以,最后,我正在寻找的,是最简单的方法,手动将两组线添加到绘图中,然后让它们在图例中正确显示.
让Emacs/Clojure环境启动并运行,我现在遇到的行为我不确定是否正常.特别是,当我启动一个nREPL并编译(Cc Ck)我的缓冲区时,我会被放入除core.clj文件顶部定义的命名空间之外的其他内容.我应该添加免责声明,我对Clojure和名称空间有点新,所以我对这一切的理解可能是模糊的.我愿意接受那些能够让我看到Better Way™的自以为是的答案.
首先,关于我的设置:
我的emacs环境是Cocoa Emacs 24,主要使用Melpa存储库中的emacs入门工具包进行设置,并通过包管理器添加了clojure和nrepl包.
我的leiningen 2项目是使用lein new test-clj.
我的project.clj:
(defproject test-clj "0.1.0-SNAPSHOT"
:description "A geospatial test app example mostly ripped off from http://datamangling.com/blog/2010/05/26/geotools-quickstart-in-clojure/"
:repositories {"osgeo-geotools" "http://download.osgeo.org/webdav/geotools"}
:url "FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[org.geotools/gt-main "8.2"]
[org.geotools/gt-shapefile "8.2"]
[org.geotools/gt-epsg-hsql "8.2"]
[org.geotools/gt-swing "8.2"]])
Run Code Online (Sandbox Code Playgroud)
我的core.clj:
(ns test-clj.core
(:import [org.geotools.data CachingFeatureSource FeatureSource FileDataStore FileDataStoreFinder])
(:import [org.geotools.map DefaultMapContext MapContext])
(:import [org.geotools.swing JMapFrame])
(:import [org.geotools.swing.data JFileDataStoreChooser]))
(defn show-shapefile
"Prompts the user for …Run Code Online (Sandbox Code Playgroud) 这个问题询问R中的时间段聚合,大熊猫称之为重新采样.最有用的答案是使用XTS包在给定的时间段内分组,应用一些函数,如sum()或mean().
其中一条评论表明,在lubridate中有类似的东西,但没有详细说明.有人可以使用lubridate提供一个惯用的例子吗?我已经阅读了几次相关的rubridate小插图,可以想象一下lubridate和plyr的组合,但是我想确保没有一种我更容易丢失的方法.
为了使示例更真实,假设我想从此数据集中向北行驶的每日自行车总数:
library(lubridate)
library(reshape2)
bikecounts <- read.csv(url("http://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD"), header=TRUE, stringsAsFactors=FALSE)
names(bikecounts) <- c("Date", "Northbound", "Southbound")
Run Code Online (Sandbox Code Playgroud)
数据如下所示:
> head(bikecounts)
Date Northbound Southbound
1 10/02/2012 12:00:00 AM 0 0
2 10/02/2012 01:00:00 AM 0 0
3 10/02/2012 02:00:00 AM 0 0
4 10/02/2012 03:00:00 AM 0 0
5 10/02/2012 04:00:00 AM 0 0
6 10/02/2012 05:00:00 AM 0 0
Run Code Online (Sandbox Code Playgroud)