Skip to content
Prev 274253 / 398506 Next

Applying function to only numeric variable (plyr package?)

Hi:

One approach to this problem in plyr is to use the recently developed
mutate() function rather than ddply(). mutate() is a somewhat faster
version of transform(); when used as a standalone function, it doesn't
take a grouping variable as an argument. For this example, one could
use

mutate(df, px = pct(x), py = pct(y))
  c1 c2      x      y   px   py
1  A  Y 0.5234 0.9251 52.3 92.5
2  B  Y 0.6919 0.7616 69.2 76.2
3  C  N 0.2307 0.3624 23.1 36.2
4  C  N 0.1160 0.4462 11.6 44.6

Another option is to use numcolwise() from the plyr package, which
will apply the function of interest to all numeric variables in the
data frame. This is a way to generate the desired outcome for this
example:

f <- numcolwise(pct)
cbind(df[, 1:2], f(df))
  c1 c2    x    y
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

In a data frame with a large number of columns, one could separate out
the non-numeric variables with sapply(), as shown in a previous
response, into one data frame and then cbind() it to the result of
numcolwise().

HTH,
Dennis
On Wed, Oct 12, 2011 at 6:18 AM, <Michael.Laviolette at dhhs.state.nh.us> wrote:
Message-ID: <CADv2QyFnFaBFiOLYzxexgd2HQDsd-ZQJXBemV8L2t6Do_NdsuA@mail.gmail.com>
In-Reply-To: <OF28D6637A.7F0970C2-ON85257926.006F890E-85257927.00491A60@dhhs.state.nh.us>