Posted By: Anonymous
In the R data frame coded for below, I would like to replace all of the times that
junk <- data.frame(x <- rep(LETTERS[1:4], 3), y <- letters[1:12]) colnames(junk) <- c("nm", "val")
nm val 1 A a 2 B b 3 C c 4 D d 5 A e 6 B f 7 C g 8 D h 9 A i 10 B j 11 C k 12 D l
My initial attempt was to use a
if statements like so:
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"
but as I am sure you can see, this replaces ALL of the values of
b. I can see why this is doing this but I can’t seem to get it to replace only those cases of junk$nm where the original value was
NOTE: I managed to solve the problem with
gsub but in the interest of learning R I still would like to know how to get my original approach to work (if it is possible)
Easier to convert nm to characters and then make the change:
junk$nm <- as.character(junk$nm) junk$nm[junk$nm == "B"] <- "b"
EDIT: And if indeed you need to maintain nm as factors, add this in the end:
junk$nm <- as.factor(junk$nm)