将多列的数值转换为以(降序)顺序为连续整数的因子级别

时间:2017-02-27 14:34:21

标签: r

考虑包含数值的数据框c

a = c(0, 1, 3, 5, 6, 0, 1, 3, 6)
b = c(2, 2, 4, 6, 7, 1, 1, 3, 7)
c = data.frame(var1 = a, var2 = b)

我想将每一列转换为因子级别,如下所示(最低级别为1而不是0,这很重要):

levels(c$var1) = length(unique(c$var1)):1
levels(c$var2) = length(unique(c$var2)):1

我必须执行此操作的列数可能会有所不同,因此我希望进一步自动执行此操作。我可以通过循环执行此操作,但有没有一种方法可以在没有循环的情况下执行此操作?我不知道如何使用applylapply甚至catcolwise(来自plyr)来执行此操作,因为函数length(unique())是每个时间应用于不同的列。

1 个答案:

答案 0 :(得分:1)

我们可以使用lapply循环遍历列,并将levels指定为列中lengthunique元素的反向序列,并将输出分配回数据集

c[] <-lapply(c, function(x) {levels(x) <- length(unique(x)):1; x})