[R] replace zeros for NA in a column based on values of another column

Rui Barradas ruipbarradas at sapo.pt
Sat Mar 2 18:23:06 CET 2013


Hello,

Arun has a point, I forgot to check the element to be replaced for a 
zero. The following code will do that.

dat <- read.table(text = "
a       b       c       d
0       1       1       0
1       1       1       1
1       0       0       1
", header = TRUE)
dat <- data.matrix(dat)
str(dat)

dat[, 1:2] <- sapply(1:2, function(i) ifelse(dat[, i] == 0 & dat[, 4] == 
0, NA, dat[, i]))


Hope this helps,

Rui Barradas

Em 02-03-2013 16:11, arun escreveu:
> HI,
>
> Not sure I understand it correctly,
>
> data1<-read.table(text="
>   a      b      c      d
>   0      1      1      0
>   1      1      1      1
>   1      0      0      1
> ",sep="",header=TRUE)
> data2<- data1
> data3<- data1
> If i follow this logic for the 1st and 2nd columns,
>   data1[ data1[ , 4 ] == 0 , 1 ] <- NA
>   data1[ data1[ , 4 ] == 0 , 2 ] <- NA
>   data1
> #   a  b c d
> #1 NA NA 1 0
> #2  1  1 1 1
> #3  1  0 0 1
>
> Still, the column 'b' with 0 element is left as such while and `1` in b is replaced with NA
>
>    data2[,1][data2[,4]==0 & data2[,1]==0]<- NA
>   data2[,2][data2[,4]==0 & data2[,2]==0]<- NA
>   data2
> #   a b c d
> #1 NA 1 1 0
> #2  1 1 1 1
> #3  1 0 0 1
>
> #or you can try
> data3[,1:2]<- lapply(letters[1:2],function(x) {x1<-cbind(data3[,x],data3[,4]);colnames(x1)<- c(x,"d");x1; x1[rowSums(x1)==0,1]<-NA;x1[,1]})
>   data3
> #   a b c d
> #1 NA 1 1 0
> #2  1 1 1 1
> #3  1 0 0 1
>
> A.K.
>
>
>
>
> ----- Original Message -----
> From: Anthony Damico <ajdamico at gmail.com>
> To: Camilo Mora <cmora at dal.ca>
> Cc: R help <r-help at r-project.org>
> Sent: Saturday, March 2, 2013 6:10 AM
> Subject: Re: [R] replace zeros for NA in a column based on values of another column
>
> you want to replace all rows where the 4th column is zero..  (data[ , 4 ]
> == 0)
> and you want to perform that replacement in the first column..
>
> so try
>
> data[ data[ , 4 ] == 0 , 1 ] <- NA
>
>
>
> On Sat, Mar 2, 2013 at 5:26 AM, Camilo Mora <cmora at dal.ca> wrote:
>
>> Hi everyone,
>>
>> Imagine that I have a data frame with four columns:
>> data<-
>> a       b       c       d
>> 0       1       1       0
>> 1       1       1       1
>> 1       0       0       1
>>
>> I want to replace the zeros in columns a:b for NA only for the rows in
>> which column d are zero. So
>>
>> a       b       c       d
>> NA      1       1       0
>> 1       1       1       1
>> 1       0       0       1
>>
>> I am trying this:
>> data[,1:3][data[4] == 0] <- NA
>> But get this error:
>>
>> Error in `[<-.data.frame`(`*tmp*`, Data[4] == 0, value = NA) :
>>     only logical matrix subscripts are allowed in replacement
>>
>> Does anyone knows the reason of this error or is there an alternative to
>> replace the values in one column based on the values of another?
>>
>> Thanks,
>>
>> Camilo
>>
>> Camilo Mora, Ph.D.
>> Department of Geography, University of Hawaii
>> http://www.soc.hawaii.edu/**mora/ <http://www.soc.hawaii.edu/mora/>
>>
>> ______________________________**________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>> PLEASE do read the posting guide http://www.R-project.org/**
>> posting-guide.html <http://www.R-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>      [[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.
>
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list