[R] Changing entries of column of type "factor"/Adding a new level to a factor

Fridolin smells_like_rock at gmx.net
Mon Aug 27 12:09:19 CEST 2012


What is a smart way to change an entry inside a column of a dataframe or
matrix which is of type "factor"?

Here is my script incl. input data:
> #set working directory:
> setwd("K:/R")
> 
> #read in data:
> input<-read.table("Exampleinput.txt", sep="\t", header=TRUE)
> 
> #check data:
> input
   Ind      M1      M2      M3
1    1   96/98 120/120     0/0
2    2 102/108 120/124 305/305
3    3  96/108 120/120     0/0
4    4     0/0 116/120 300/305
5    5  96/108 120/130 300/305
6    6   98/98 116/120 300/305
7    7  98/108 120/120 305/305
8    8  98/108 120/120 305/305
9    9  98/102 120/124 300/300
10  10 108/108 120/120 305/305
> str(input)
'data.frame':	10 obs. of  4 variables:
 $ Ind: int  1 2 3 4 5 6 7 8 9 10
 $ M1 : Factor w/ 8 levels "0/0","102/108",..: 5 2 4 1 4 8 7 7 6 3
 $ M2 : Factor w/ 4 levels "116/120","120/120",..: 2 3 2 1 4 1 2 2 3 2
 $ M3 : Factor w/ 4 levels "0/0","300/300",..: 1 4 1 3 3 3 4 4 2 4
> 
> #replace 0/0 by 999/999:
> for (r in 1:10)
+   for (c in 2:4)
+     if (input[r,c]=="0/0") input[r,c]<-"999/999"
Warnmeldungen:
1: In `[<-.factor`(`*tmp*`, iseq, value = "999/999") :
  invalid factor level, NAs generated
2: In `[<-.factor`(`*tmp*`, iseq, value = "999/999") :
  invalid factor level, NAs generated
3: In `[<-.factor`(`*tmp*`, iseq, value = "999/999") :
  invalid factor level, NAs generated
> input
   Ind      M1      M2      M3
1    1   96/98 120/120    <NA>
2    2 102/108 120/124 305/305
3    3  96/108 120/120    <NA>
4    4    <NA> 116/120 300/305
5    5  96/108 120/130 300/305
6    6   98/98 116/120 300/305
7    7  98/108 120/120 305/305
8    8  98/108 120/120 305/305
9    9  98/102 120/124 300/300
10  10 108/108 120/120 305/305


I want to replace all "0/0" by "999/999". My code should work for columns of
type "character" and "integer". But to make it work for a "factor"-column I
would need to add the new level of "999/999" at first, I guess. How do I add
a new level?



--
View this message in context: http://r.789695.n4.nabble.com/Changing-entries-of-column-of-type-factor-Adding-a-new-level-to-a-factor-tp4641402.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list