我有一个这样的int列:

idNums
   2
 101
  34
  25
   8
 ...

我需要将它们转换为 3 个因子列,如下所示:
digit1        digit2         digit3
  0             0              2
  1             0              1
  0             3              4
  0             2              5
  0             0              8
 ...           ...            ...

有什么建议么?

最佳答案

这是一个使用模块化算术运算符 %%%/% 的有趣解决方案:

d <- c(2, 101, 34, 25, 8)
res <- data.frame(digit1 = d %/% 100,
                  digit2 = d %% 100 %/% 10,
                  digit3 = d %% 10)
#   digit1 digit2 digit3
# 1      0      0      2
# 2      1      0      1
# 3      0      3      4
# 4      0      2      5
# 5      0      0      8

请注意,它为每个列返回数字值具有次要的-但很好的副作用。但是,如果您想要 因子 列,只需执行以下命令:
res[] <- lapply(res, as.factor)

all(sapply(res, class)=="factor")
#[1] TRUE

关于R基于数字将整数列转换为3因子列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8792328/

10-13 07:28