i have data.frame mapping contains path , map. have data.frame data contains raw path , value. edit: path might have 2 components or more: e.g. "a>c" or "a>c>b"
set.seed(24); data <- data.frame( path=paste0(sample(letters[1:3], 25, replace=true), ">", sample(letters[1:3], 25, replace=true)), value=rnorm(25) ) mapping <- data.frame(path=c("a","b","c"), map=c("x","y","z")) lapply(mapping, function (x) { (i in 1:nrow(data)) { data$path[i] <- gsub(as.character(x["path"]),as.character(x["map"]),as.character(data$path[i])) } }) i'm trying replace path in data map value in mapping doesn't seem working me.
"a>c" converted "x>z".
i understand loops not in r, can't think of way code it. data size i'm working 6m row in data , 16k rows in mapping.
clarification on data: while path consists of alphabets (abc) now, real path domain names. number of steps in path not fixed @ 2 , can number.
you can use chartr
data$path <- chartr('abc', 'xyz', data$path) or if using data 'mapping'
data$path <- chartr(paste(mapping$path, collapse=''), paste(mapping$map, collapse=''), data$path) or using gsubfn
library(gsubfn) pat <- paste0('[', paste(mapping$path, collapse=''),']') indx <- setnames(as.character(mapping$map), mapping$path) gsubfn(pat, as.list(indx), as.character(data$path)) or base r option based on @smci's comment
vapply(strsplit(as.character(data$path), '>'), function(x) paste(indx[x], collapse=">"), character(1l))
Comments
Post a Comment