将factor变量转换为numeric,从numeric转换为factor

时间:2017-02-15 21:20:22

标签: r

我有一个庞大的数据集(9.000.000个条目),其中有两列是因子(409级)。 这表示某段时间内机场之间的航班。 下面的数据集已经在转换后。意思是“ORIGIN”和“DEST”在其数字形式上。

  ORIGIN DEST weight        alpha
      1   24   1195 1.512274e-04
      1   78    844 2.557285e-03
    100    2   1615 3.176266e-17
    100    3   4196 9.111249e-09
    100    7   1221 6.471515e-10
    100   12    725 2.129114e-04

第二个数据集,包含所有IATA代码,纬度和经度。

           City IATA  Latitude Longitude
         Goroka  GKA -6.081690   145.392
         Madang  MAG -5.207080   145.789
    Mount Hagen  HGU -5.826790   144.296
         Nadzab  LAE -6.569803   146.726
   Port Moresby  POM -9.443380   147.220
          Wewak  WWK -3.583830   143.669

目前的流程如下:

  1. 将2列转换为数字(因为我稍后需要它们 那)
  2. 将data.set转换为igraph
  3. 应用过滤算法(这就是列为数字的原因)
  4. 再次转换为数据集。
  5. 我的问题是我现在想要将我拥有的数字转换回之前的因子,因为我需要来自第二个数据集的纬度和经度。

    有什么想法吗?我已经尝试了很多我能想到的东西。

2 个答案:

答案 0 :(得分:1)

我会在将其转换为.numeric之前存储您的因子级别,然后在恢复因子类时重新应用它们。
清楚我在说什么的一个例子:

data(iris)
# Store the levels
l<-levels(iris$Species)

# Convert to numeric
iris$Species <- as.numeric(iris$Species)
head(iris$Species)
class(iris$Species)

# Convert back to factor
iris$Species <- factor(iris$Species, labels = l)
head(iris$Species)
class(iris$Species)

答案 1 :(得分:0)

在将因子强制转换为数字之前,请创建数字因子标签对的查找表。在工作流程结束时,将因子标签合并回数据。

library(dplyr)
data(warpbreaks)
original <- warpbreaks

value_label_map <- warpbreaks %>%
  select(wool, tension) %>%
  mutate(wool_num = as.numeric(wool), tension_num = as.numeric(tension)) %>%
  distinct()

warpbreaks <- warpbreaks %>%
  mutate(wool = as.numeric(wool), tension = as.numeric(tension))

warpbreaks <- left_join(warpbreaks, value_label_map,
  by = c("wool" = "wool_num", "tension" = "tension_num"))

identical(original$wool, warpbreaks$wool.y)
identical(original$tension, warpbreaks$tension.y)