我试图用ggplot2创建这样的分层直方图:

以下是我认为可行的一些数据和代码:
my.data <- data.frame(treat = rep(c(0, 1), 100), prop_score = runif(2 * 100))
my.data <- transform(my.data, treat = ifelse(treat == 1, "treatment", "control"))
my.data <- transform(my.data, treat = as.factor(treat))
my.fig <- ggplot() + geom_histogram(data = my.data, binwidth = 0.05, alpha = 0.01, aes(x = prop_score, linetype = treat, position = identity))
Run Code Online (Sandbox Code Playgroud)
但我的代码产生了这个:

谢谢!我更喜欢ggplot2(在我学习的时候,我认为我只是学习了普通的,可扩展的绘图语言),但我对任何事情都很开放.
或者至少我认为它们被称为子查询(新手和SQLite中的自我训练).我SELECT在同一个数据库中有两个表的两个语句.我想沿着列date和这两个子查询加入symbol.子查询单独工作,但当我尝试JOIN我得到一个错误(error in statement: near "JOIN": syntax error).这是我的查询字符串:
SELECT date, symbol, SUM(oi*contract_settle) AS oi_dollar
FROM (SELECT date, symbol, oi, contract_settle
FROM ann
UNION
SELECT date, symbol, oi, contract_settle
FROM qtr)
GROUP BY date, symbol
HAVING oi_dollar > 0
JOIN
(SELECT date, symbol, ret FROM crsp
USING (date, symbol))
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是我昨天学到的问题的延伸apply.weekly.这很好用,但我想在宽zoo对象上做这件事.如果我apply.weekly在宽范围内使用zoo它会对列进行求和,然后执行每周聚合:
> library(xts)
> set.seed(2001)
> zoo.daily <- zoo(data.frame(a=rnorm(20), b=rnorm(20), c=rnorm(20)), order.by=as.Date("2001-05-25") + 0:19)
> apply.weekly(zoo.daily, sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370
> apply.weekly(zoo.daily[, 1] + zoo.daily[, 2] + zoo.daily[, 3], sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370
Run Code Online (Sandbox Code Playgroud)
我尝试了apply运营商系列,但这些似乎剥离了zoo日期索引.我可以在一个for循环中完成它,但它确实非常耗时(远远超过周期性aggregate函数的四倍as.yearmon).这是for循环:
week.ends <- index(zoo.daily[endpoints(zoo.daily, "weeks")[-1], ])
num.weeks <- nweeks(zoo.daily)
num.stocks <- ncol(zoo.daily)
zoo.weeks <- zoo(matrix(NA, …Run Code Online (Sandbox Code Playgroud) 我在 R 中有两个数据框,我想有条件地将它们合并到id和 上day。合并是right合并到left变量的变量尽可能是新的/新鲜的/最近的,但必须至少是三天前的。
但是,如果没有匹配的right,以我的id-date在对left我还是想留住他们。我的研究有两个部分,所以我不想放弃的id-day意见,只是因为他们是不完整的。
我可以sqldf一步完成吗?我目前的方法需要一个额外的基础 R merge。
left <- data.frame(id=rep(1:5, each=10),
day=rep(1:10, times=5),
x=rnorm(5*10))
right <- data.frame(id=rep(1:2, each=21),
day=rep(-10:10, times=2),
y=rnorm(2*21))
combined <- sqldf("SELECT L.id, L.day, L.x, R.y
FROM left L LEFT OUTER JOIN right R
ON (L.id = R.id)
WHERE ((L.day - R.day) >= 3)
GROUP BY L.id, L.day
HAVING (R.day = MAX(R.day))")
combined
combined.2 …Run Code Online (Sandbox Code Playgroud) 我有一个相对较大的csv文件(1.2gb ...大到我的一台计算机上的2GB RAM).对于一列中的每个条目,我想附加"1C",以便我可以加入/合并另一个dataframe/db表.
如果文件不是那么大,那么很容易read.csv导入data然后再使用data$symbol <- paste(data$symbol, "1C", sep="").但现在我收到了can't allocate vector of size x警告.
手动解决方案scan(),我唯一的选择吗?(我有点害怕破坏我的数据)谢谢!
我将R和Rnw文件分开,然后load("file.R")在第一个Sweave块中加载R数据/图.有没有办法可以将源文件打印到附录而不执行所有代码?(即,代码足够慢,我不希望source()它在一个echo=TRUE块中).
谢谢!
更新 - 实际上,我认为我的source()想法不起作用.
我发现这个问题是关于改变Sweave中ggplot2图的大小.我添加了Sweaveopts{width=3, height=3}它,它确实缩小了绘图的大小,但它没有缩小文本.所以最后,轴上的所有数字都重叠了.
有没有办法在Sweave中缩放整个ggplot2图,这样我就不必手动缩放原始ggplot2调用中的每个组件?这似乎是我应该做的事情,但我无法在ggplot2书籍或网站上找到它.谢谢!
FWIW,这是我在Sweave的电话:
\SweaveOpts{width=3, height=3}
\begin{figure}
\begin{center}
<<fig=TRUE>>=
print(plot.m)
@
\end{center}
\caption{stuff}
\label{fig:stuff}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
并且生成ggplot2图的调用:
plot.m <- ggplot(temp, aes(date, spread)) + geom_bar(stat="identity") + scale_x_date(major="years", minor="months")
Run Code Online (Sandbox Code Playgroud) 我有一个长数据框,有三列fyear,tic和dcvt(财政年度,股票代码和总可转换债务).大约有18个财政年度和几千个代码.我想添加一个指标变量,每当dcvt从一年到下一年上升时都是一个变量.
我试过了ddply,但是我丢失了fyear专栏并且不确定如何取回专栏.
library(plyr)
temp <- data.frame(fyear = rep(1992:2009, 10), tic = rep(letters[1:10], each = 18), dcvt = rnorm(180, 200, 10))
my.fun <- function(x) x <- c(0, ifelse(tail(x, -1) - head(x, -1) > 0, 1, 0))
temp2 <- ddply(temp, "tic", colwise(my.fun, "dcvt"))
Run Code Online (Sandbox Code Playgroud)
我也尝试使用reshape2包转换为广泛,然后运行for循环,但当然,这需要永远.
有没有办法可以快速完成这项工作?我应该zoo使用宽物体diff吗?如果可以的话,我想避免通过时间序列.谢谢!
我有大多数NA条目的向量.我想NA用前面的非NA入口替换每个向量.具体来说,第一个条目将始终为1,后面跟着一堆NAs,我想用1代替.i第一个条目可能是另一个数字,比方说2,然后是更多NAs,我想用2代替.等等.下面的循环实现了这一点,但必须有更多的R方式来做,对吧?我想用矢量化ifelse(),但我无法弄清楚如何用ith条目替换i-1th条目.
> vec <- rep(NA, 10)
> vec
[1] NA NA NA NA NA NA NA NA NA NA
> vec[1] <- 1; vec[4] <- 2; vec[7] <- 3
> vec
[1] 1 NA NA 2 NA NA 3 NA NA NA
> for (i in 1:length(vec)) if (is.na(vec[i])) vec[i] <- vec[i-1]
> vec
[1] 1 1 1 2 2 2 3 …Run Code Online (Sandbox Code Playgroud) 我试图forvalues在Stata版本11.2 的循环中标记变量.
但是,我无法使用扩展字符串函数word # of string习惯用法:
local names `""Growth" "Mature" "All""'
forvalues i = 0/2 {
local name : word `i' of `names'
display "`name'"
}
Run Code Online (Sandbox Code Playgroud)
这遵循Statalist解决方案,但我不断收到invalid syntax错误.
我也尝试过local names Growth Mature All,但这也不起作用.
有没有办法在算法上做到这一点?
我想使用SSC 上esttab的estout软件包制作一个汇总统计表。我可以把表格做得很好,但我想添加一个列来计算每个变量的非缺失观测值的数量。也就是说,有些变量可能不完整,我希望读者能够清楚这一点。
在下面的示例中,我删除了 的前五个观察值price,因此我希望该行中有 69。但是我的代码不包括特定于行的观察计数,只包括页脚中的观察总数。
sysuse auto, clear
estpost summarize, detail
replace price = . in 1/5
local screen ///
cells("N mean sd min p50 max") ///
nonumber label
esttab, `screen'
Run Code Online (Sandbox Code Playgroud)
这会产生一个空N列,我希望在 69 处有一个空列,然后是所有 74 列。