Let me caution against this approach as factors are generally stored
in R as integers but in a way that's not particularly meaningful for
most applications. This will silently make use of those internal
codes, the quantiles of which probably are not helpful for what you
are looking for. Furthermore
Or this:
> str(x)
'data.frame': 100 obs. of 6 variables:
$ x1: num 0.4548 0.0352 0.6353 0.6017 0.8588 ...
$ x2: num 0.849 0.335 0.986 0.617 0.212 ...
$ x3: num 1.35 0.46 1.67 1.23 1.14 ...
$ x4: num 2.67 0.91 3.31 2.48 2.28 ...
$ x5: Factor w/ 3 levels "1","2","3": 3 1 3 3 3 1 2 3 3 1 .
Just add something to skip the non-numeric variables:
e.g.,
lapply(x, function(x) if(is.numeric(x)) quantile(x,c(0.01, 0.99)) else
levels(x))
If you want to use sapply(), you'll need the factor case to return
something that is 2x1 so it can all be simplified nicely.
Michael
On Mon, Oct 31, 201
Hi,
you are almost there:
>sapply(x, function(x) quantile(as.numeric(x), c(0.01, 0.99)))
x1 x2 x3x4 x5 x6
1% 0.0351777 0.007628441 0.225533 0.4459064 1 1
99% 0.9938919 0.964901423 1.826894 3.6226944 3 2
Andrija
On Mon, Oct 31, 2011 at 2:09 PM, aajit75 wrote
When data contains both factor and numeric variables, how to get quartiles
for all numeric variables?
n <- 100
x1 <- runif(n)
x2 <- runif(n)
x3 <- x1 + x2 + runif(n)/10
x4 <- x1 + x2 + x3 + runif(n)/10
x5 <- factor(sample(c('a','b','c'),n,replace=TRUE))
x6 <- factor(1*(x5=='a' | x5=='c'))
dat
5 matches
Mail list logo