r:将整数映射到char或number

时间:2018-03-28 13:32:51

标签: r

我有一个这样的数据框:

from to func
94019567899392 94019567898224 f1
94019567899392 94019567896800 f1
94019567900608 94019567899392 f4

现在我想将我的数值映射到更简单的东西:所有值必须在前两列上保持一致。

from to func
1 3 f1
1 4 f1
2 1 f4

或者是字符(不在乎)

from to func
A C f1
A D f1
B A f4

我怎么能在R?中做到这一点?

1 个答案:

答案 0 :(得分:1)

听起来像factor格式就是你要找的。如果将向量转换为因子,则所有唯一值都将变为“级别”,它们在引擎盖下表示为整数。将此因子转换回数值应该再次揭示这些因素:

> bigNumbers <- c(94019567899392, 94019567898224,
+                 94019567899392, 94019567896800,
+                 94019567900608, 94019567899392)
> factor(bigNumbers)
[1] 94019567899392 94019567898224 94019567899392 94019567896800 94019567900608 94019567899392
Levels: 94019567896800 94019567898224 94019567899392 94019567900608
> as.numeric(factor(bigNumbers))
[1] 3 2 3 1 4 3

正如评论中所提到的,这不适用于多个列,因为每个列都将单独更改。

如果我们采用我们想要转换的data.frame的一部分,将其转换为矩阵,那么我们可以做我们的因素 - &gt;数字转换,然后将其放回我们的data.frame。

x <- data.frame(x = c(94019567899392,94019567899392,94019567900608), y = c(94019567898224,94019567896800,94019567899392), z = 1:3)
convertedColumns <- 1:2
toConvert <- as.matrix(x[, convertedColumns])
result <- matrix(as.numeric(factor(toConvert)), ncol = length(convertedColumns))
for(column in convertedColumns){
  x[[column]] <- result[, column]
}
x
  x y z
1 3 2 1
2 3 1 2
3 4 3 3