【问题标题】:Cleaning up factor levels in data table with .SD and lapply使用 .SD 和 lapply 清理数据表中的因子水平
【发布时间】:2018-04-10 10:35:44
【问题描述】:

这个问题与这个问题Cleaning up factor Levels collapsing multiple Level labels 有关,但我想将此扩展到数据表并折叠我的数据表的一部分列的因子水平。我一直在努力在数据表中使用 lapply...

这是我的 MWE 以及我想分别对两列使用 levels() 来实现的目标

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]

或者我可以以某种方式在另一个步骤中使用级别因素。但我找不到任何类似的东西。我实际上希望将“0”转换为 NA,因为它在我的 MWE 中完成。

【问题讨论】:

    标签: r data.table factors


    【解决方案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]
    

    【讨论】:

    • 完美,看到您的解决方案,我觉得自己没有考虑到这一点很愚蠢......
    • @MaxM,我只是有一点经验。随着经验的积累,您将成为大师。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2016-07-19
    • 2019-08-07
    • 1970-01-01
    • 2018-06-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多