"Dummy" 编码一个在 R 中有两个值的因子

"Dummy" coding a factor that has two values in R

我不太确定是否有更好的方式来表达我的问题。基本上我有路线数据(例如 LAX-BWI、SFO-JFK 等)。我想模拟它,所以我基本上会为航班接触的每个机场设置一个 1(方向性无关紧要,因此 LAX-BWI 与 BWI-LAX 相同)。

例如:

     ROUTE | OFF |  ON |  
    LAX-BWI|10:00|17:00|  
    LAX-SFO|11:00|13:00|  
    BWI-LAX|18:00|01:00|   
    BWI-SFO|15:00|20:00|   

变成

    BWI|LAX|SFO| OFF |  ON |  
     1 | 1 | 0 |10:00|17:00|  
     0 | 1 | 1 |11:00|13:00|  
     1 | 1 | 0 |18:00|01:00|  
     1 | 0 | 1 |15:00|20:00|   

我可以将数据作为字符串 "BWI-LAX" 拉入,或者有两列 Orig 和 Dest,其值为字符串 "BWI" 和 "LAX"。

我能想到的最接近的事情就是将其虚拟化,但如果我想要的有一个实际的术语,请告诉我。我觉得这已经得到解答,但我想不出如何搜索它。

刚刚有人问了一个非常相似的问题,所以我将从 :

复制我的答案
allDest <- sort(unique(unlist(strsplit(dataFrame$ROUTE, "-"))))
for(i in allDest){
  dataFrame[, i] <- grepl(i, dataFrame$ROUTE)
}

这将为集合中的每个机场创建一个新列,并用 TRUE 或 FALSE 指示航班是否到达机场。如果你想要 0 和 1,你可以这样做:

allDest <- sort(unique(unlist(strsplit(dataFrame$ROUTE, "-"))))
for(i in allDest){
  dataFrame[, i] <- grepl(i, dataFrame$ROUTE)*1
}

TRUE*1 为 1 FALSE*1 为 0.

不需要for loopdata.frames 只是列表,因此我们可以一次性分配额外的元素:

cities <- unique(unlist(strsplit(df$ROUTE, "-")))
df[, cities] <- lapply(cities, function(x) as.numeric(grepl(x, df$ROUTE)))

#    ROUTE   OFF    ON LAX BWI SFO
#1 LAX-BWI 10:00 17:00   1   1   0
#2 LAX-SFO 11:00 13:00   1   0   1
#3 BWI-LAX 18:00 01:00   1   1   0
#4 BWI-SFO 15:00 20:00   0   1   1

ROUTE列很容易在计算后删除,如果你不想的话