R-多个表中的一列需要从factor改为character

R-多个表中的一列需要从factor改为character,r,R,我有一个向量c(“d1”,“d2”,“d3”),其中d1,d2,d3是数据表。它们每个都有一个名为ID的列,这是一个因子变量。我需要将d1、d2、d3表中的所有ID列从factor转换为character 我已经尝试了以下方法: d<-c("d1","d2","d3") #[1] invisible(lapply(d,function(x){get(x)[["ID"]]<-as.character(get(x)[["ID"]])})) #[2] invisible

我有一个向量
c(“d1”,“d2”,“d3”)
,其中d1,d2,d3是数据表。它们每个都有一个名为
ID
的列,这是一个因子变量。我需要将d1、d2、d3表中的所有
ID
列从factor转换为character

我已经尝试了以下方法:

  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)])}))

d这里有一种方法可以尝试。它使用
list2env
(许多人会明智地建议不要使用)替换
.GlobalEnv
中的对象

该方法适用于
data.frame
s和
data.table
s,但如果使用
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  A   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’ and '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’ and 'data.frame':    2 obs. of  2 variables:
#   $ ID : chr  "A" "B"
#   $ num: int  1 2
#   - attr(*, ".internal.selfref")=<externalptr> 

它们是
data.table
s还是
data.frame
s?
library(data.table)
d1 <- d2 <- d3 <- data.table(ID = factor(c("A", "B")), num = 1:2)
str(d1)
# 'Classes ‘data.table’ and '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’ and 'data.frame':    2 obs. of  2 variables:
#   $ ID : chr  "A" "B"
#   $ num: int  1 2
#   - attr(*, ".internal.selfref")=<externalptr>