[R] row-wise conditional update in dataframe

jim holtman jholtman at gmail.com
Tue Jan 22 02:28:57 CET 2008


You need to do 'is.na(x)' instead of "x == NA"..  Here is a way of doing it:

> x <- matrix(1,10,10)
> x[sample(1:100,10)] <- NA
> x
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    1    1    1    1    1    1    1    1     1
 [2,]    1    1    1    1    1    1   NA    1    1     1
 [3,]    1    1    1    1    1    1    1    1    1     1
 [4,]    1    1    1    1    1    1    1    1    1     1
 [5,]    1    1    1    1    1    1    1    1    1     1
 [6,]   NA    1    1    1    1    1    1    1   NA     1
 [7,]    1    1   NA   NA    1   NA    1    1    1    NA
 [8,]    1    1    1    1    1   NA    1    1    1     1
 [9,]    1    1    1    1    1    1    1    1   NA     1
[10,]    1   NA    1    1    1    1    1    1    1     1
>
> apply(x,1,function(.row) sum(is.na(.row)))
 [1] 0 1 0 0 0 2 4 1 1 1
>


On Jan 21, 2008 7:23 PM, Jon Erik Ween <jween at klaru-baycrest.on.ca> wrote:
> Hi!
>
> I need to conditionally update a dataframe field based on values in
> other fields and can't find even how to search for this right. Sorry
> if this has been asked before.
>
> But, specifically, I have a 490 X 221 dataframe and need to count, by
> row, how many fields in Dataframe$field_a...Dataframe$field_zz are
> non-null and enter this value in Dataset$ABCtaskNum. I have field
> name definitions in a vector "vars" and tried writing a custom
> function to handle the within-row calculation
>
> myfunct <-function () {for (i in 1:length(vars)) {if (vars[i] != NA)
> {Dataset$ABCtaskNum<-Dataset$ABCtaskNum+1}}}
>
> and then use "apply" to handle the row to row calculation
>
> Dataset <- apply(Dataset, 1, myfunc) Where Dataset already has field
> Dataset$ABCtaskNum set to 0 in all rows.
>
> But that didn't work. Doesn't help if I declare variables (vars and
> ABCtaskNum) in the function declaration either, but then I haven't
> quite figured out how best to do variable substitutions in R.
>
> Thanks for any help. Cheers
>
> Jon
>
> Soli Deo Gloria
>
> Jon Erik Ween, MD, MS
> Scientist, Kunin-Lunenfeld Applied Research Unit
> Director, Stroke Clinic, Brain Health Clinic
>     Baycrest Centre for Geriatric Care
> Assistant Professor, Dept. of Medicine, Div. of Neurology
>     University of Toronto Faculty of Medicine
>
> Posluns Building, 6th Floor, Room 644
> Baycrest Centre for Geriatric Care
> 3560 Bathurst Street
> Toronto, Ontario M6A 2E1
> Canada
>
> Phone: 416-785-2500 x3636
> Fax: 416-785-2484
> Email: jween at klaru-baycrest.on.ca
>
>
> Confidential: This communication and any attachment(s) may contain
> confidential or privileged information and is intended solely for the
> address(es) or the entity representing the recipient(s). If you have
> received this information in error, you are hereby advised to destroy
> the document and any attachment(s), make no copies of same and inform
> the sender immediately of the error. Any unauthorized use or
> disclosure of this information is strictly prohibited.
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list