我不太确定是否有更好的方式来说出我的要求。基本上我有路由数据(例如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”。
我能想到的最接近的是愚弄它,但是如果有一个我想要的实际术语,请告诉我。我觉得这已经得到了解答,但我想不出如何搜索它。
答案 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 loop
。 data.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
列很容易在计算后丢弃,如果你不想要它