"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 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
列很容易在计算后删除,如果你不想的话
我不太确定是否有更好的方式来表达我的问题。基本上我有路线数据(例如 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 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
列很容易在计算后删除,如果你不想的话