Hi,

if the rows in your data.frame are numeric, this solution will work.

(numeric.index <- unlist(lapply(df, is.numeric)))
df[, numeric.index] <- apply(df[,numeric.index], 2, pct)
This does not work for the example you gave, unless you coerce the columns
with the your numerics to numeric:
c1 <- c("A", "B", "C", "C")
c2 <- factor(c(1, 1, 2, 2), labels = c("Y","N"))
x <- c(0.5234, 0.6919, 0.2307, 0.1160)
y <- c(0.9251, 0.7616, 0.3624, 0.4462)
df <- data.frame(c1, c2, x, y)


df$y <- as.numeric(df$y)
df$x <- as.numeric(df$x)

pct <- function(x) round(100*x, 1)
(numeric.index <- unlist(lapply(df, is.numeric)))
df[, numeric.index] <- apply(df[,numeric.index], 2, pct)

Christoph


2011/10/12 <Michael.Laviolette@dhhs.state.nh.us>

>
> My data frame consists of character variables, factors, and proportions,
> something like
>
> c1 <- c("A", "B", "C", "C")
> c2 <- factor(c(1, 1, 2, 2), labels = c("Y","N"))
> x <- c(0.5234, 0.6919, 0.2307, 0.1160)
> y <- c(0.9251, 0.7616, 0.3624, 0.4462)
> df <- data.frame(c1, c2, x, y)
> pct <- function(x) round(100*x, 1)
>
> I want to apply the pct function to only the numeric variables so that the
> proportions are computed to percentages, and retain all the columns:
>
>  c1 c2   x1   x2
> 1  A  Y 52.3 92.5
> 2  B  Y 69.2 76.2
> 3  C  N 23.1 36.2
> 4  C  N 11.6 44.6
>
> I've been approaching it with the ddply and colwise functions from the plyr
> package, but in that case each I need each row to be its own group and
> retain all columns. Am I on the right track? If not, what's the best way to
> do this?
>
> Thanks in advance,
> M. L.
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]

