【发布时间】:2020-05-12 11:18:12
【问题描述】:
我经常需要将一个连续变量(只有有限种类的值)转换为一个因子。
我通常使用下面的代码,但最近我有错误消息。
你能让这段代码更简单吗?
DT2 <- DT1 %>%
mutate_if(function(x) length(unique(x))<=3 & length(unique(x))>1,funs(as.factor))
【问题讨论】:
我经常需要将一个连续变量(只有有限种类的值)转换为一个因子。
我通常使用下面的代码,但最近我有错误消息。
你能让这段代码更简单吗?
DT2 <- DT1 %>%
mutate_if(function(x) length(unique(x))<=3 & length(unique(x))>1,funs(as.factor))
【问题讨论】:
怎么样
DT2 <- DT1 %>% mutate_at(c("col1", "col2"), as.factor)
其中 col 是要重铸为因子的列的名称
【讨论】:
如果你想让那行“更简单”,可以在外部指定谓词函数,这样更容易阅读。像这样的...
my_predicate <- function(x) {
length(unique(x)) <= 3 & length(unique(x)) > 1
}
DT1 %>%
mutate_if(my_predicate, as.factor)
我相信这将替换满足此逻辑的当前列。如果要从中创建新列,可以使用命名列表指定列的名称。
DT1 %>%
mutate_if(my_predicate, list(new_col = as.factor))
【讨论】: