我有一个庞大的数据集(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
目前的流程如下:
我的问题是我现在想要将我拥有的数字转换回之前的因子,因为我需要来自第二个数据集的纬度和经度。
有什么想法吗?我已经尝试了很多我能想到的东西。
答案 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)