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@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.


______________________________________________
R-help@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.

Reply via email to