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>