I have a large data frame where I would like to append characters to row names based on a condition. I have the following example:
trees <- data.frame(char = c('flower', 'cone', 'flower', 'cone'), number = c(3, 3, 5, 6))
rownames(trees) <- c('birch', 'pine', 'maple', 'redwood')
This is what I'm going for, a 'c' next to pine and redwood:
char number
birch flower 3
pine c cone 3
maple flower 5
redwood c cone 6
I know I can use paste to append characters:
# this gives the output I am looking for
paste(rownames(trees[trees$char == 'cone',]), 'c')
[1] "pine c" "redwood c"
However, when I try this following line of code, the changes don't appear in my data frame:
rownames(trees[trees$char == 'cone',]) <- paste(rownames(trees[trees$char == 'cone',]), 'c')
One option is
library(stringr)
x1 <- str_extract(trees$char, "^c")
row.names(trees) <- trimws(paste(row.names(trees), replace(x1, is.na(x1), "")))
trees
# char number
#birch flower 3
#pine c cone 3
#maple flower 5
#redwood c cone 6
Another option is
row.names(trees) <- paste(row.names(trees), c("", "c")[(trees$char == "cone")+1])