代码之家  ›  专栏  ›  技术社区  ›  versusChou

“Dummy”编码R中有两个值的因子[重复]

  •  0
  • versusChou  · 技术社区  · 7 年前

    我不确定是否有更好的方式来表达我的要求。基本上我有路由数据(例如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 回复  |  直到 7 年前
        1
  •  1
  •   JBGruber    7 年前

    有人刚刚问了一个非常类似的问题,所以我将从 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。

        2
  •  0
  •   Mike H.    7 年前

    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 如果不需要,在计算后很容易删除列