考虑包含数值的数据框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
我必须执行此操作的列数可能会有所不同,因此我希望进一步自动执行此操作。我可以通过循环执行此操作,但有没有一种方法可以在没有循环的情况下执行此操作?我不知道如何使用apply
,lapply
甚至catcolwise
(来自plyr
)来执行此操作,因为函数length(unique())
是每个时间应用于不同的列。
答案 0 :(得分:1)
我们可以使用lapply
循环遍历列,并将levels
指定为列中length
个unique
元素的反向序列,并将输出分配回数据集
c[] <-lapply(c, function(x) {levels(x) <- length(unique(x)):1; x})