[R] Replacing NAs with 0 for variables with the same ending

Uli Kleinwechter u.kleinwechter at uni-hohenheim.de
Fri Jan 15 14:14:37 CET 2010


Jim Lemon schrieb:
> On 01/15/2010 07:10 PM, Uli Kleinwechter wrote:
>> Dear all,
>>
>> I'm looking for a way to replace NA's with 0 for a number of variables
>> which share the same ending and which constitute a subset of a data
>> frame.
>>
>> Say, for example, there is
>>
>>> data<- data.frame(ax=c(1,2,3,NA,0) , bx=c(3,5,NA,5,1) ,
>> ay=c(5,NA,2,NA,0) , by=c(4,2,NA,2,1))
>>> data
>>    ax bx ay by
>> 1  1  3  5  4
>> 2  2  5 NA  2
>> 3  3 NA  2 NA
>> 4 NA  5 NA  2
>> 5  0  1  0  1
>>
>> I wish to apply something like  //
>> //
>> />  data[is.na(data)]<- 0/
>> //
>> but not to the entire data frame, rather only to the variables ending
>> with x.
>>
> Hi Uli,
> How about:
>
> data[,grep("x",names(data))][is.na(data[,grep("x",names(data))])]<-0
>
> Jim
>
Hi Jim,

thanks a lot. I'm just afraid that grep matches any occurence of "x" in
the variable name. So variables which would contain "x" at any position,
not necessarily only at the last one would be selected, as well. To
refine my example (sorry for having been so imprecise before...):

> data<- data.frame(ax=c(1,2,3,NA,0) , bx=c(3,5,NA,5,1)
,ay=c(5,NA,2,NA,0) , xy=c(4,2,NA,2,1))
> data
  ax bx ay xy
1  1  3  5  4
2  2  5 NA  2
3  3 NA  2 NA
4 NA  5 NA  2
5  0  1  0  1

The task, again, would be to replace NA's with 0 in "ax" and "bx", but
not in "ay" and "xy"

Best,

Uli



More information about the R-help mailing list