我有一个向量c("d1","d2","d3")
,其中d1,d2,d3是数据表。它们中的每一个都有一个名为ID
的列,它是一个因子变量。我需要在d1,d2,d3表中将所有ID
列从因子转换为字符。
我已经尝试了以下内容:
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)])}))
请注意,我不想将其他因子列从d1,d2,d3转换为ID以外的字符列。
非常感谢任何帮助
答案 0 :(得分:1)
这是您可以尝试的方法。它使用list2env
(很多人会明智地建议反对)来替换.GlobalEnv
中的对象。
该方法适用于data.frame
和data.table
,但如果使用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
,则可以跳过list2env
部分:
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>