R - A column from multiple tables needs to be changed from factor to character -
i have vector c("d1","d2","d3")
in d1, d2,d3 data tables. each of them has column called id
factor variable. need convert id
columns factor character in d1,d2,d3 tables.
i have tried following:
d<-c("d1","d2","d3") #[1] invisible(lapply(d,function(x){get(x)[["id"]]<-as.character(get(x)[["id"]])})) #[2] invisible(lapply(d,function(x){get(x)[,list(id)] <- as.character(get(x)[,list(id)])}))
please note don't want convert other factor columns d1,d2,d3 character columns except id.
any appreciated
here's approach can try. uses list2env
(which many people wisely recommend against) replace objects in .globalenv
.
the approach work data.frame
s , data.table
s, though better use different approach if using data.table
s.
d1 <- d2 <- d3 <- data.frame(id = c("a", "b"), num = 1:2) library(data.table) d3 <- as.data.table(d1)[, id := factor(id)] d1 # id num # 1 1 # 2 b 2 str(d1) # 'data.frame': 2 obs. of 2 variables: # $ id : factor w/ 2 levels "a","b": 1 2 # $ num: int 1 2 str(d3) # 'classes ‘data.table’ , 'data.frame': 2 obs. of 2 variables: # $ id : factor w/ 2 levels "a","b": 1 2 # $ num: int 1 2 # - attr(*, ".internal.selfref")=<externalptr> list2env(lapply(mget(c("d1","d2","d3")), function(x) { x[["id"]] <- as.character(x[["id"]]) ; x}), .globalenv) str(d1) # 'data.frame': 2 obs. of 2 variables: # $ id : chr "a" "b" # $ num: int 1 2 str(d3) # classes ‘data.table’ , 'data.frame': 2 obs. of 2 variables: # $ id : chr "a" "b" # $ num: int 1 2 # - attr(*, ".internal.selfref")=<externalptr>
if are using data.table
, can skip list2env
part:
library(data.table) d1 <- d2 <- d3 <- data.table(id = factor(c("a", "b")), num = 1:2) str(d1) # 'classes ‘data.table’ , 'data.frame': 2 obs. of 2 variables: # $ id : factor w/ 2 levels "a","b": 1 2 # $ num: int 1 2 # - attr(*, ".internal.selfref")=<externalptr> lapply(mget(c("d1","d2","d3")), function(x) x[, id := as.character(id)][]) str(d1) # classes ‘data.table’ , 'data.frame': 2 obs. of 2 variables: # $ id : chr "a" "b" # $ num: int 1 2 # - attr(*, ".internal.selfref")=<externalptr>
Comments
Post a Comment