[R] assign NA to rows by test on multiple columns of a data frame

Massimo Bressan massimo.bressan at arpa.veneto.it
Wed Nov 22 12:19:29 CET 2017


...well, I don't think this is exactly the expected result (see my post)

to be noted that the columns affected should be "A" and "B"

thanks for the help

max

----- Messaggio originale -----
Da: "Rui Barradas" <ruipbarradas at sapo.pt>
A: "Massimo Bressan" <massimo.bressan at arpa.veneto.it>, "r-help" <r-help at r-project.org>
Inviato: Mercoledì, 22 novembre 2017 11:49:08
Oggetto: Re: [R] assign NA to rows by test on multiple columns of a data frame

Hello,

Try the following.


icol <- which(grepl("flag", names(mydf)))
mydf[icol] <- lapply(mydf[icol], function(x){
         is.na(x) <- x == 0
         x
     })

mydf
#   A A_flag B B_flag
#1  8     10 5     12
#2  7     NA 6      9
#3 10      1 2     NA
#4  1     NA 1      5
#5  5      2 0     NA


Hope this helps,

Rui Barradas

On 11/22/2017 10:34 AM, Massimo Bressan wrote:
> 
> 
> Given this data frame (a simplified, essential reproducible example)
> 
> 
> 
> 
> A<-c(8,7,10,1,5)
> 
> A_flag<-c(10,0,1,0,2)
> 
> B<-c(5,6,2,1,0)
> 
> B_flag<-c(12,9,0,5,0)
> 
> 
> 
> 
> mydf<-data.frame(A, A_flag, B, B_flag)
> 
> 
> 
> 
> # this is my initial df
> 
> mydf
> 
> 
> 
> 
> I want to get to this final situation
> 
> 
> 
> 
> i<-which(mydf$A_flag==0)
> 
> mydf$A[i]<-NA
> 
> 
> 
> 
> ii<-which(mydf$B_flag==0)
> 
> mydf$B[ii]<-NA
> 
> 
> 
> 
> # this is my final df
> 
> mydf
> 
> 
> 
> 
> By considering that I have to perform this task in a data frame with many columns I’m wondering if there is a compact and effective way to get the final result with just one ‘sweep’ of the dataframe?
> 
> 
> 
> 
> I was thinking to the function apply or lapply but I can not properly conceive how to…
> 
> 
> 
> 
> any hint for that?
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>
-- 
------------------------------------------------------------
Massimo Bressan 

ARPAV
Agenzia Regionale per la Prevenzione e
Protezione Ambientale del Veneto

Dipartimento Provinciale di Treviso 
Via Santa Barbara, 5/a 
31100 Treviso, Italy 

tel: +39 0422 558545
fax: +39 0422 558516
e-mail: massimo.bressan at arpa.veneto.it



More information about the R-help mailing list