[R] replacing NA's with 0 in a dataframe for specified columns

Gabor Grothendieck ggrothendieck at myway.com
Wed Sep 15 22:20:41 CEST 2004


The col funtion can be helpful here.  We want to satisfy two conditions: 

	1. the element is an NA
	2. the element lies in one of the specified columns

The first two lines below calculate logical vectors for these two,
respectively, and the last line assigns 0 to those elements.

	isna <- is.na(x)
	iscol <- col(isna) %in% c(1,3)
	x[isna & iscol] <- 0

To specify the columns by name rather than number first
calculate their column numbers and then proceed as before.
That is, replace the second line by:

	cols <- match(c("a", "c"), colnames(x))
        iscol <- col(isna) %in% cols





David Kane <dave <at> kanecap.com> writes:

: 
: I know that there must be a cool way of doing this, but I can't think
: of it. Let's say I have an dataframe with NA's.
: 
: > x <- data.frame(a = c(0,1,2,NA), b = c(0,NA,1,2), c = c(NA, 0, 1, 2))
: > x
:    a  b  c
: 1  0  0 NA
: 2  1 NA  0
: 3  2  1  1
: 4 NA  2  2
: > 
: 
: I know it is easy to replace all the NA's with zeroes.
: 
: > x[is.na(x)] <- 0
: > x
:   a b c
: 1 0 0 0
: 2 1 0 0
: 3 2 1 1
: 4 0 2 2
: > 
: 
: But how do I do this for just columns a and c, leaving the NA in
: column b alone?
: 
: Thanks,
: 
: Dave Kane
: 
: > R.version
:          _                
: platform i686-pc-linux-gnu
: arch     i686             
: os       linux-gnu        
: system   i686, linux-gnu  
: status                    
: major    1                
: minor    9.1              
: year     2004             
: month    06               
: day      21               
: language R                
: >
: 
: ______________________________________________
: R-help <at> stat.math.ethz.ch mailing list
: https://stat.ethz.ch/mailman/listinfo/r-help
: PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
: 
:




More information about the R-help mailing list