“Dummy”编码在R

时间:2017-11-20 18:30:09

标签: r data-science categorical-data

我不太确定是否有更好的方式来说出我的要求。基本上我有路由数据(例如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”。

我能想到的最接近的是愚弄它,但是如果有一个我想要的实际术语,请告诉我。我觉得这已经得到了解答,但我想不出如何搜索它。

2 个答案:

答案 0 :(得分:1)

有人问了一个非常相似的问题,所以我会从here复制我的答案:

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。

答案 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列很容易在计算后丢弃,如果你不想要它