此问题与此问题Cleaning up factor Levels collapsing multiple Level labels有关,但我想将其扩展到数据表并折叠数据表的列子集的因子级别。我总是在数据表中使用lapply ...
这是我的MWE以及我想分别使用level()分别对两列进行实现
df<-data.table(Index=1:3,factor1=c("Yes", "No", "0"), factor2=c("yes","no","no"))
str(df)
subset_factor<-c("factor1", "factor2")
label.yesno<- list("Yes" = c("Yes","yes"),
"No" = c("No", "no"))
df[,(subset_factor):=lapply(.SD,factor),.SD=subset_factor]
str(df)
levels(df$factor1)<-label.yesno
levels(df$factor2)<-label.yesno
df
我希望在创建因子时可以直接使用列表
df[,(subset_factor):=lapply(.SD,factor, labels=label.yesno),.SD=subset_factor]
或者我可以以某种方式在另一个步骤中使用Levels因子..但我找不到任何类似的东西。我其实想要&#34; 0&#34;在我的MWE中完成转换为NA。
答案 0 :(得分:1)
我认为您可以编写一个简单的辅助函数来简化此过程:
# df<-data.table(Index=1:3,factor1=c("Yes", "No", "0"), factor2=c("yes","no","no"))
# str(df)
# subset_factor<-c("factor1", "factor2")
# label.yesno<- list("Yes" = c("Yes","yes"),
# "No" = c("No", "no"))
f <- function(x, lab){
res <- factor(x)
levels(res) <- lab
res
}
df[, (subset_factor) := lapply(.SD, f, lab = label.yesno), .SDcols = subset_factor]