我试图在R中做一个"分组依据" - 样式加权平均值.有一些基本意思,下面的代码(使用Hadley的plyr包)运行良好.
ddply(mydf,.(period),mean)
Run Code Online (Sandbox Code Playgroud)
如果我使用相同的方法加权.我得到以下错误"'x'和'w'必须具有相同的长度",我不明白,因为weighted.mean部分在ddply之外工作.
weighted.mean(mydf$mycol,mydf$myweight) # works just fine
ddply(mydf,.(period),weighted.mean,mydf$mycol,mydf$myweight) # returns the erros described above
ddply(mydf,.(period),weighted.mean(mydf$mycol,mydf$myweight)) # different code same story
Run Code Online (Sandbox Code Playgroud)
我想过编写一个自定义函数而不是使用weighted.mean然后将它传递给ddply,甚至用子集从头开始编写新东西.在我的情况下,希望这将是太多的工作,但应该有一个更聪明的解决方案已经存在的东西.
thx提前任何建议!
我使用ddply data.frame按类别汇总一些,如下所示:
# with both group and size being factors / categorical
split.df <- ddply(mydata,.(group,size),summarize,
sumGroupSize = sum(someValue))
Run Code Online (Sandbox Code Playgroud)
这很顺利,但我喜欢计算比率,这意味着我需要除以组的总数.如何在同一个ddply电话中计算这样的总数?
假设我想在A组中观察到大小等级为1的观察结果.显然,我必须先计算出1级大小的所有观测值的总和.当然,我可以通过两个ddply呼叫来完成此操作,但使用所有一个呼叫会更舒服.有办法吗?
编辑:我不是故意要求过于具体,但我意识到我在这里打扰了人们.所以这是我的具体问题.事实上,我确实有一个有效的例子,但我不认为它真的很漂亮.此外,它有一个我需要克服的缺点:它无法正确应用.
library(plyr)
# make the dataset more "realistic"
mydata <- warpbreaks
names(mydata) <- c("someValue","group","size")
mydata$category <- c(1,2,3)
mydata$categoryA <- c("A","A","X","X","Z","Z")
# add some NA
mydata$category[c(8,10,19)] <- NA
mydata$categoryA[c(14,1,20)] <- NA
# someValue is summarized !
# note we have a another, varying category hence we need the a parameter
calcShares <- function(a, data) {
# !is.na needs …Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot2(分别是qplot)来生成一个带有Sweave的报告.现在我需要一些帮助来调整绘图的大小.我使用以下Sweave代码来包含它.
\begin{figure}[htbp]
\begin{center}
<<fig=true,echo=false>>=
print(mygraph)
@
\caption{MyCaption}
\end{center}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
如果我添加一个宽度参数(如下图所示)来绘制图表,但是没有真正按比例缩小.
<<fig=true,echo=false,width=3>>=
Run Code Online (Sandbox Code Playgroud)
如果我使用ggsave()代替,我可以使用scale参数并影响生成的.pdf文件的大小.有没有办法影响绘图的尺寸而不保存它(因为.pdf是由Sweave生成的)?我需要添加到我的qplot代码中吗?
mygraph=qplot(date,value,data=graph1,geom="line",colour=variable,xlab="",ylab="")
+ scale_y_continuous(limits = c(-0.3,0.3))
Run Code Online (Sandbox Code Playgroud)
Thx提前提出任何建议!
我想分配代表分位数的因子.因此我需要它们是数字.这就是我编写以下函数的原因,这基本上是我的问题的答案:
qdum <- function(v,q){
qd = quantile(v,1:(q)/q)
v = as.data.frame(v)
v$b = 0
names(v) <- c("a","b")
i=1
for (i in 1:q){
if(i == 1)
v$b[ v$a < qd[1]] = 1
else
v$b[v$a > qd[i-1] & v$a <= qd[i]] = i
}
all = list(qd,v)
return(all)
}
Run Code Online (Sandbox Code Playgroud)
你现在可能会笑:) 返回的列表包含一个变量,可用于将每个观察值分配给其对应的分位数.我现在的问题是:有更好的方法(更"本土"或"核心")吗?我知道quantcut(来自gtools包),但至少我得到的参数,我最终只有那些不方便(? - 至少对我来说)的阈值.
任何有助于变得更好的反馈都值得赞赏!
R教科书继续推广使用lapply而不是循环.即使对于带有参数的函数,这也很容易
lapply(somelist, f, a=1, b=2)
Run Code Online (Sandbox Code Playgroud)
但是如果参数根据列表元素而改变怎么办?假设我的名单包括:
somelist$USA
somelist$Europe
somelist$Switzerland
Run Code Online (Sandbox Code Playgroud)
加上有anotherlist相同的地区,我想用这些不断变化的论点来讨价还价?例如,当f是比率计算时,这可能是有用的.
lapply(somelist, f, a= somelist$USA, b=anotherlist$USA)
Run Code Online (Sandbox Code Playgroud)
是否有方法可以有效地运行这些区域?
编辑:我的问题似乎是我试图使用以前编写的函数没有索引...
ratio <-function(a,b){
z<-(b-a)/a
return(z)
}
Run Code Online (Sandbox Code Playgroud)
这导致了
lapply(data,ratio,names(data))
Run Code Online (Sandbox Code Playgroud)
这不起作用.也许其他人也可以从这个错误中吸取教训
我有一些像这样的数据集:
# date # value class
1984-04-01 95.32384 A
1984-04-01 39.86818 B
1984-07-01 43.57983 A
1984-07-01 10.83754 B
Run Code Online (Sandbox Code Playgroud)
现在我想按数据对数据进行分组,并从A类中减去B类的值.我研究了ddply,总结,融合和聚合,但不能完全得到我想要的东西.有办法轻松完成吗?请注意,我每个日期都有两个值,一个是A类,另一个是B类.我的意思是我可以将它重新排列成两个dfs,按日期和类顺序排列并再次合并,但我觉得还有更多的R方式去做吧.
我尝试了RInside的Qt示例qdensity并且非常喜欢它.这很容易设置,我很惊讶理解和修改是多么容易,因为我几乎没有Qt经验.现在我想知道是否可以在远程机器上的某处使用RInside和R.
似乎我不能将RInside用于此目的.我想知道是否有另一种创建Qt桌面应用程序的方法,该应用程序在某些服务器上与R通信.我让R Studio Server运行,我对它非常满意,但它适用于R人.为了在我们的研究所内推广我的R内容,我也希望提供一个简单的,非常有限的GUI,可以做一些基本的事情,比如showin'some graph或者a R CMD Batch.我也知道闪亮(和闪亮的服务器)并且最近一直在积极测试它,但我正在寻找一个简单的桌面客户端与我的服务器端R连接.
是否有从Rserve和Qt开始的基础?任何建议(从哪里开始,例子,一般都是坏主意)???
假设我有一个函数从MySQL表读取数据,操作它并返回一些data.frame.注意,该函数只是一个例子,其功能无关紧要......,例如:
addRowSd <- function(table,con,pattern="^Variable") {
dframe <- dbReadTable(con,table)
cn <- colnames(dframe)
qs <- subset(x, x %in% grep(pattern, x, value=TRUE))
dframe$qsd <- sd(t(dframe[,c(qs)]))
return(dframe)
}
mydf$sd <- addRowSd(...)
Run Code Online (Sandbox Code Playgroud)
我最终得到一个名为mydf的data.frame.现在我想对SQL表名的字符向量这样做,并相应地命名返回的数据帧.如果我只是用
x=lapply(MySQLtablenames,addRowSd,con)
Run Code Online (Sandbox Code Playgroud)
我会得到一些名为x的列表.当然,我可以按照我喜欢的方式取消所有内容并重命名,但我的问题是:
如何使lapply(或其他类似函数)返回多个单数据帧或至少包含从我的字符向量"MySQLtablenames"派生的某些名称的列表?
最近,我经常不得不在同一分析中处理来自多个.csv源的时间序列数据.让我们假设所有系列都是常规的季度系列(两者之间没有缺失值).通常,原始.csv数据包含日期列和1-3个变量.不幸的是,这个系列在.csv文件中的长度并不相同.
我开始在R中组织我的数据集,结果发现包含大量window()命令的大混乱.另外,我必须在将它们转换为ts()对象之前连接NAs和原始系列,因为我发现连接(多变量)ts()对象非常直观.请注意,我添加NA的原因是我希望所有系列都具有相同的长度.当然我可以修剪较长的那些,但是当我不使用较短的系列时我最终会松开观察.
我想过编写一个函数来读取.csv文件并使用它的日期列来创建ts()对象,并且可能使用另一个函数合并所有单个系列,以便在数据丢失时创建包含NA的多变量系列.我发现自己一直在切换数据类型,阅读ts和动物园手册 - 我简直无法相信它是那么复杂.
我真的认为这个问题非常普遍,并且考虑过excel中的准备工作.我的意思是我真的很讨厌excel,但是这次我想知道更有经验的useRs做什么?R还是Excel?
编辑:添加了一些示例性数据(需要聚合每日数据)file1:
27.05.11;5965.95
26.05.11;5947.06
25.05.11;5942.82
24.05.11;5939.98
Run Code Online (Sandbox Code Playgroud)
file2(没有日期col,但我知道开始和频率)
Germany;Switzerland;USA;OECDEurope
69,90974;61,8241;55,60966;64,96157
67,0394;62,18966;56,47361;64,15152
70,56651;63,6347;56,87237;65,43568
Run Code Online (Sandbox Code Playgroud)
文件3:
1984-04-01,33.3238396624473
1984-07-01,63.579833082501
1984-10-01,35.8375401560349
Run Code Online (Sandbox Code Playgroud)
我承认示例性数据确实有助于说明问题,但它是一种最佳实践类型的问题,可以解决比我更有经验的用户.您如何为多变量ts分析准备数据?
如何很好地发布回归公式?
fit1<-dynlm(dep~indep1+indep2+indep3)
s1<-summary(fit1)
s1$call
Run Code Online (Sandbox Code Playgroud)
我怎么能发誓s1$call?我的意思是我不希望在我的pdf文档中有像dynlm(formula = dep~indep1 + indep2 + indep3)这样的东西.我希望在这个函数调用样式上有更多的教科书样式.另外我想(手动?)向模型添加拦截和错误(因为它实际上在那里).
请注意,我outreg在google上找到了(现在看起来有点太重了)并且一眼就看不到我的需求.
编辑:尝试发布示例输出,实际上我很喜欢,但我不知道如何使用SO编辑器做得更好:
dep = alpha + beta_1*indep1 + beta_2*indep2 + beta_3*indep3 + epsilon
Run Code Online (Sandbox Code Playgroud)
一些矩阵表示法也可以,但打印模型定义无论如何都会很好.当然也可以手动添加它,但是当您处于稳健性检查阶段时,模型变量可能会经常更改,并且文档必须是最新的.
(使用http://texify.com :)
![IMG] http://www.texify.com/img/%5CLARGE%5C%21%5Cmbox%7Bdep%7D%20%3D%20%5Calpha%20%2B%20%5Cbeta_1%20%5Ccdot%20%5Cmbox %7Bindep1%7D%20%2B%20%5Cbeta_2%20%5Ccdot%20%5Cmbox%7Bindep2%7D%20%2B%20%5Cepsilon.gif [/ IMG](https://i.stack.imgur.com/gRu6z.gif)