[R] How to apply functions across columns?

2012-05-09 Thread Robert Latest
Hello,

me again.

I have a data frame that looks like this (actual dput output at bottom):

 head(tencor)
datelot wf.id   s1   s2   s3   s4   s5
1 08.05.2012 W0X3H0 9 1238 1263 1244 1200 1183
2 08.05.2012 W0X3H010 1367 1396 1371 1325 1311
3 08.05.2012 W0X3H011 1383 1417 1393 1346 1328

I'd like to add a column to this that gives, for each row, the
averages of the values in the columns s1 to s5. Really primitive. But
I totally absolute don't understand how to do this. I don't need any
intelligence, I know my values are always in columns 4:8.

Thanks,
robert

 dput(tencor)
structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L), .Label = 08.05.2012, class = factor), lot =
structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = W0X3H0, class = factor),
wf.id = c(9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L,
4L), s1 = c(1238L, 1367L, 1383L, 1395L, 1479L, 1411L, 1404L,
1398L, 1402L, 1380L, 1376L), s2 = c(1263L, 1396L, 1417L,
1420L, 1527L, 1452L, 1438L, 1432L, 1432L, 1412L, 1403L),
s3 = c(1244L, 1371L, 1393L, 1395L, 1497L, 1424L, 1410L, 1404L,
1398L, 1382L, 1385L), s4 = c(1200L, 1325L, 1346L, 1346L,
1444L, 1372L, 1361L, 1362L, 1359L, 1338L, 1334L), s5 = c(1183L,
1311L, 1328L, 1336L, 1426L, 1357L, 1347L, 1344L, 1339L, 1325L,
1322L)), .Names = c(date, lot, wf.id, s1, s2, s3,
s4, s5), class = data.frame, row.names = c(NA, -11L))


__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] How to apply functions across columns?

2012-05-09 Thread R. Michael Weylandt
Good reproducible example ;-)

Easiest is probably just:

cbind(tencor, ThisRowMean =  rowMeans(tencor[, 4:8]))

# Whatever you replace ThisRowMean with will become the column name

Best,
Michael

On Wed, May 9, 2012 at 10:12 AM, Robert Latest boblat...@gmail.com wrote:
 Hello,

 me again.

 I have a data frame that looks like this (actual dput output at bottom):

 head(tencor)
        date    lot wf.id   s1   s2   s3   s4   s5
 1 08.05.2012 W0X3H0     9 1238 1263 1244 1200 1183
 2 08.05.2012 W0X3H0    10 1367 1396 1371 1325 1311
 3 08.05.2012 W0X3H0    11 1383 1417 1393 1346 1328

 I'd like to add a column to this that gives, for each row, the
 averages of the values in the columns s1 to s5. Really primitive. But
 I totally absolute don't understand how to do this. I don't need any
 intelligence, I know my values are always in columns 4:8.

 Thanks,
 robert

 dput(tencor)
 structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
 1L, 1L, 1L, 1L), .Label = 08.05.2012, class = factor), lot =
 structure(c(1L,
 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = W0X3H0, class = factor),
    wf.id = c(9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L,
    4L), s1 = c(1238L, 1367L, 1383L, 1395L, 1479L, 1411L, 1404L,
    1398L, 1402L, 1380L, 1376L), s2 = c(1263L, 1396L, 1417L,
    1420L, 1527L, 1452L, 1438L, 1432L, 1432L, 1412L, 1403L),
    s3 = c(1244L, 1371L, 1393L, 1395L, 1497L, 1424L, 1410L, 1404L,
    1398L, 1382L, 1385L), s4 = c(1200L, 1325L, 1346L, 1346L,
    1444L, 1372L, 1361L, 1362L, 1359L, 1338L, 1334L), s5 = c(1183L,
    1311L, 1328L, 1336L, 1426L, 1357L, 1347L, 1344L, 1339L, 1325L,
    1322L)), .Names = c(date, lot, wf.id, s1, s2, s3,
 s4, s5), class = data.frame, row.names = c(NA, -11L))


 __
 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
 and provide commented, minimal, self-contained, reproducible code.

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] How to apply functions across columns?

2012-05-09 Thread Robert Latest
On Wed, May 9, 2012 at 4:19 PM, R. Michael Weylandt
michael.weyla...@gmail.com wrote:
 Good reproducible example ;-)

 Easiest is probably just:

 cbind(tencor, ThisRowMean =  rowMeans(tencor[, 4:8]))

Actually, after frying my brain on tapply() and sapply() I found that
just plain apply() does what I need:

tencor$mean - apply(tencor[4:8], 1, FUN=mean)

This way I'm also not tied to just mean() as aggregator but can use
any homemade function (this would have been my followup question had I
followed your advice ;-)

Thanks!
robert

__
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
and provide commented, minimal, self-contained, reproducible code.


Re: [R] How to apply functions across columns?

2012-05-09 Thread R. Michael Weylandt
Indeed, apply is very flexible and idiomatically R (i.e., the right
way to do it) -- but, just a heads up, for datasets with many
rows/columns rowMeans and colMeans will be *much* faster (there's loop
overhead in the apply family)

Best,
Michael

On Wed, May 9, 2012 at 3:46 PM, Robert Latest boblat...@gmail.com wrote:
 On Wed, May 9, 2012 at 4:19 PM, R. Michael Weylandt
 michael.weyla...@gmail.com wrote:
 Good reproducible example ;-)

 Easiest is probably just:

 cbind(tencor, ThisRowMean =  rowMeans(tencor[, 4:8]))

 Actually, after frying my brain on tapply() and sapply() I found that
 just plain apply() does what I need:

 tencor$mean - apply(tencor[4:8], 1, FUN=mean)

 This way I'm also not tied to just mean() as aggregator but can use
 any homemade function (this would have been my followup question had I
 followed your advice ;-)

 Thanks!
 robert

 __
 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
 and provide commented, minimal, self-contained, reproducible code.

__
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
and provide commented, minimal, self-contained, reproducible code.