如何在R中借助data.table批量取消多个因子的有序属性?
在R中用data.table批量取消多个因子的有序属性
先看示例数据集:
dt <- data.table( variable1 = 1:5, variable2 = c(1,2,5,6,8), variable3 = factor(c("a","b","c","d","e"), ordered=T), variable4 = factor(c("ka","ba","ca","da","er"), ordered=F) )
要批量取消有序因子的有序属性,不用逐个列处理,按下面步骤操作:
- 先筛选出所有带有序属性的因子列:
ordered_cols <- names(dt)[sapply(dt, is.ordered)]
这行代码会返回所有有序因子列的名称,示例里就是variable3。
- 批量将这些列转换为普通因子:
dt[, (ordered_cols) := lapply(.SD, function(x) factor(x, ordered = FALSE)), .SDcols = ordered_cols]
这里用data.table的:=操作符直接在原表上修改,.SDcols指定要处理的目标列,lapply对每个有序因子重新生成不带有序属性的普通因子。
验证结果,检查各列是否还保留有序属性:
dt[, sapply(.SD, is.ordered)]
输出会全是FALSE,说明所有有序因子的有序属性已被取消。
内容的提问来源于stack exchange,提问作者jappo19
相关产品推荐
相关产品推荐

