Oh thanks for that clarification Bert! Hope you enjoyed your coffee! I
ended up just using the transform argument in the ddply function. It
worked and it repeated, then I called a mode function in another call to
ddply that summarised. Kinda hacky but oh well!
On Tue, Apr 19, 2016 at 12:31 PM, Bert Gunter <bgunter.4567 at gmail.com>
wrote:
... and I'm getting another cup of coffee...
-- Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Tue, Apr 19, 2016 at 10:30 AM, Bert Gunter <bgunter.4567 at gmail.com>
wrote:
NO NO -- I am wrong! The paste() expression is of course evaluated.
It's just that a character string is returned of the form "something -
something".
I apologize for the confusion.
-- Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Tue, Apr 19, 2016 at 10:25 AM, Bert Gunter <bgunter.4567 at gmail.com>
To be precise:
paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
is an expression that evaluates to a character string:
"round(quantile(x,.25),0) - round(quantile(x,0.75),0)"
no matter what the argument of your function, x. Hence
return(paste(...)) will return this exact character string and never
evaluates x.
Cheers,
Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Tue, Apr 19, 2016 at 8:34 AM, William Dunlap via R-help
<r-help at r-project.org> wrote:
It always helps to say how the suggestion did not work. Jim's
function had a typo in it - was that the problem? Or did you not
change the call to ddply to use that function. Here is something
that might "work" for you:
library(plyr)
data <- data.frame(groupColumn=rep(1:5,1:5), col1=2^(0:14))
myIqr <- function(x) {
paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
}
ddply(data, ~groupColumn, summarise, col1_myIqr=myIqr(col1),
col1_IQR=stats::IQR(col1))
# groupColumn col1_myIqr col1_IQR
#1 1 1-1 0
#2 2 2-4 1
#3 3 12-24 12
#4 4 112-320 208
#5 5 2048-8192 6144
The important point is that
paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
is not a function, it is an expression. ddplyr wants functions.
Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Tue, Apr 19, 2016 at 7:56 AM, Michael Artz <michaeleartz at gmail.com
That didn't work Jim!
Thanks anyway
On Mon, Apr 18, 2016 at 9:02 PM, Jim Lemon <drjimlemon at gmail.com>
Hi Michael,
At a guess, try this:
iqr<-function(x) {
return(paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
}
.col3_Range=iqr(datat$tenure)
Jim
On Tue, Apr 19, 2016 at 11:15 AM, Michael Artz <
michaeleartz at gmail.com>
Hi,
I am trying to show an interquartile range while grouping
the function ddply(). So my function call now is like
groupedAll <- ddply(data
,~groupColumn
,summarise
,col1_mean=mean(col1)
,col2_mode=Mode(col2) #Function I wrote for
,col3_Range=paste(as.character(round(quantile(datat$tenure,c(.25)))),
as.character(round(quantile(data$tenure,c(.75)))), sep = "-")
)
#custom Mode function
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
I am not sre what is going wrong on my interquartile range
works on its own outside of ddply()
[[alternative HTML version deleted]]