我有一个这样的数据框:
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?中做到这一点?
答案 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