使用重新编码将列添加到数据框

时间:2016-07-27 16:14:54

标签: r

我正在浏览dplyr上的DataCamp类。他们让我加载'hflights'数据然后让我创建一个名为'Carrier'的新列,用他们的实际名称替换每个航空公司代码。解决方案如下:

    hflights <- tbl_df(hflights)

    names <- c("AA" = "American", "AS" = "Alaska", "B6" = "JetBlue", "CO" = "Continental",
             "DL" = "Delta", "OO" = "SkyWest", "UA" = "United", "US" = "US_Airways",
             "WN" = "Southwest", "EV" = "Atlantic_Southeast", "F9" = "Frontier",
             "FL" = "AirTran", "MQ" = "American_Eagle", "XE" = "ExpressJet", "YV" = "Mesa")

    hflights["Carrier"] <- names[hflights$UniqueCarrier]

我想出了如何做到这一点,这是有效的,但我并不清楚R在这里做了什么。我知道我正在为hflights数据框添加一个新列,但我不清楚R是如何(或为什么)用载波代码替换载波名称。

2 个答案:

答案 0 :(得分:3)

这是一个查找表,其中命名向量的名称用于返回该向量中的值。提供几个例子:

提醒一下,可以通过引用索引或名称来对命名向量进行子集化:

names[1:2]
        AA         AS 
"American"   "Alaska" 
names[c("AA", "AS")]
        AA         AS 
"American"   "Alaska" 

一个很好的功能是可以重复这些引用以生成扩展矢量:

names[rep(1:2, 2)]
        AA         AS         AA         AS 
"American"   "Alaska" "American"   "Alaska"
names[rep(c("AA", "AS"), 2)]
        AA         AS         AA         AS 
"American"   "Alaska" "American"   "Alaska"

使用此方法,可以使用包含查找表索引或查找表名称的向量来生成长度相同但具有所需值的向量。

答案 1 :(得分:2)

namescharacterstring类型的命名向量。这类似于Python字典,其中每个string索引一个变量。在这种情况下,您可以使用运营商代码进行索引,并且值是全名。

R中,当您为矢量编制索引时,您可以使用列表执行此操作。在这种情况下,您正在索引&#34;字典&#34;使用缩写代码,它返回一个列表,其中索引的长度与其值匹配。