Skip to content

Summary: Process multiple columns of data.frame

2 messages · Thompson, David (MNR), Gregor Gorjanc

#
Thank you Jim Holtman and Mark Leeds for your help.

Original question:
Solution:
for (i in c('bd.n', 'ht.n', 'dbh.n')) Bout[is.na(Bout[[i]]), i] <- 0

Toy example:
+ c1=c(NA, NA, 10, NA, 15, 11, 12, 14, 14, 11), 
+ c2=c(13, NA, 16, 16, NA, 12, 14, 19, 18, NA), 
+ c3=c(NA, NA, 11, 19, 17, NA, 11, 16, 20, 13), 
+ c4=c(20, NA, 15, 11, NA, 15, NA, 13, 14, 15), 
+ c5=c(14, NA, 13, 16, 17, 17, 16, NA, 15, NA), 
+ c6=c(NA, NA, 13, 11, NA, 16, 15, 12, NA, 20)) )
c1 c2 c3 c4 c5 c6
1  NA 13 NA 20 14 NA
2  NA NA NA NA NA NA
3  10 16 11 15 13 13
4  NA 16 19 11 16 11
5  15 NA 17 NA 17 NA
6  11 12 NA 15 17 16
7  12 14 11 NA 16 15
8  14 19 16 13 NA 12
9  14 18 20 14 15 NA
10 11 NA 13 15 NA 20
c1 c2 c3 c4 c5 c6
1  NA 13  0 20 14 NA
2  NA  0  0  0 NA NA
3  10 16 11 15 13 13
4  NA 16 19 11 16 11
5  15  0 17  0 17 NA
6  11 12  0 15 17 16
7  12 14 11  0 16 15
8  14 19 16 13 NA 12
9  14 18 20 14 15 NA
10 11  0 13 15 NA 20

Thank you, DaveT.
*************************************
Silviculture Data Analyst
Ontario Forest Research Institute
Ontario Ministry of Natural Resources
david.john.thompson at ontario.ca
http://ofri.mnr.gov.on.ca
#
Thompson, David (MNR <David.John.Thompson <at> ontario.ca> writes:
ABove solution is completely OK, but can be cumbersome. I wrote functions
NAToUnknown() and unknownToNA() with exactly the same problem in mind. 
Take a look in gdata package. I also described the function in RNews

G. Gorjanc. Working with unknown values: the
gdata package. R News, 7(1):24?26, 2007.
http://CRAN.R-project.org/doc/Rnews/Rnews_2007-1.pdf.

For your example try the following:

library(gdata)

df.0 <- as.data.frame( cbind( 
c1=c(NA, NA, 10, NA, 15, 11, 12, 14, 14, 11), 
c2=c(13, NA, 16, 16, NA, 12, 14, 19, 18, NA), 
c3=c(NA, NA, 11, 19, 17, NA, 11, 16, 20, 13), 
c4=c(20, NA, 15, 11, NA, 15, NA, 13, 14, 15), 
c5=c(14, NA, 13, 16, 17, 17, 16, NA, 15, NA), 
c6=c(NA, NA, 13, 11, NA, 16, 15, 12, NA, 20)) )

df.0
   c1 c2 c3 c4 c5 c6
1  NA 13 NA 20 14 NA
2  NA NA NA NA NA NA
3  10 16 11 15 13 13
4  NA 16 19 11 16 11
5  15 NA 17 NA 17 NA
6  11 12 NA 15 17 16
7  12 14 11 NA 16 15
8  14 19 16 13 NA 12
9  14 18 20 14 15 NA
10 11 NA 13 15 NA 20

NAToUnknown(df.0, unknown=0)
   c1 c2 c3 c4 c5 c6
1   0 13  0 20 14  0
2   0  0  0  0  0  0
3  10 16 11 15 13 13
4   0 16 19 11 16 11
5  15  0 17  0 17  0
6  11 12  0 15 17 16
7  12 14 11  0 16 15
8  14 19 16 13  0 12
9  14 18 20 14 15  0
10 11  0 13 15  0 20