# RE: [R] "apply" question

From: Liaw, Andy <andy_liaw_at_merck.com>
Date: Tue 03 May 2005 - 01:06:47 EST

Try:

> ## Number of NAs in columns 6-10.
> colSums(is.na(data[6:10]))

Col6 Col7 Col8 Col9 Col10

1 1 1 1 0
>
> ## Number of NAs in each row of columns 6-10.
> rowSums(is.na(data[6:10]))

1 2
2 2
>
> ## Sums of rows 1-5 omitting corresponding NAs in cols 6-10.
> rowSums(data[,1:5] * !is.na(data[,6:10]))
1 2
7 9

If all entries are numeric, it'd be easier to use matrices instead of data frames.

HTH,
Andy

> From: Christoph Scherber
>
> Dear R users,
>
> Iīve got a simple question but somehow I canīt find the solution:
>
> I have a data frame with columns 1-5 containing one set of integer
> values, and columns 6-10 containing another set of integer values.
> Columns 6-10 contain NAīs at some places.
>
> I now want to calculate
> (1) the number of values in each row of columns 6-10 that were NAīs
> (2) the sum of all values on columns 1-5 for which there were
> no missing
> values in the corresponding cells of columns 6-10.
>
>
> Example: (letīs call the data frame "data")
>
> Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10
> 1 2 5 2 3 NA 5 NA 1 4
> 3 1 4 5 2 6 NA 4 NA 1
>
> The result would then be (for the first row)
> (1) "There were 2 NAīs in columns 6-10."
> (2) The mean of Columns 1-5 was 2+2+3=7" (because there were
> NAīs in the
> 1st and 3rd position in rows 6-10)
>
> So far, I know how to calculate the rowSums for the data.frame, but I
> donīt know how to condition these on the values of columns 6-10
>
> rowSums(data[,1:5]) #thatīs straightforward
> apply(data[,6:19],1,function(x)sum(is.na(x))) #this also works fine
>
> But I donīt know how to select just the desired values of columns 1-5
> (as described above)
>
>
> Can anyone help me? Thanks a lot in advance!
>
> Best regards
> Christoph
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help