r语言给向量命名_使用R做更多事情:使用命名向量的快速查找表

r语言给向量命名

阿肯色州的州缩写是什么? 是AR吗? AK? 如?

也许您已经有了包含信息的数据框。 或任何信息,其中一栏包含类别,另一栏包含值。 在某些时候,您可能希望按类别(有时称为key)查找 。 许多编程语言都有使用键-值对的方式。 在R中,使用命名向量也很容易做到这一点。 这是如何做。

[ 在我们的视频教程系列中获得Sharon Machlis的R技巧 | 阅读InfoWorld教程: 学习使用R处理大数据 如何重塑R中的数据 触手可及的R数据操作技巧R的 初学者指南 | 通过InfoWorld大数据报告新闻通讯了解最新的分析和大数据。 ]

我有状态名称和缩写的数据,它们存储在名为postal_df的数据框中。 (如果您想继续的话,创建该数据框的代码在本文的底部)。

我将运行tail(postal_df)来查看其外观。

State PostalCode
45       Vermont         VT
46      Virginia         VA
47    Washington         WA
48 West Virginia         WV
49     Wisconsin         WI
50       Wyoming         WY

查找表/命名向量以值作为向量,并以键作为名称。 因此,让我首先对值进行向量处理,这些值位于PostalCode列中:

getpostalcode <- postal_df$PostalCode

接下来,我从“状态”列中添加名称。

names(getpostalcode) <- postal_df$State

使用该命名矢量作为查找表,所述格式是mylookupvector [“键”]。

因此,以下是获取阿肯色州邮政编码的方法:

getpostalcode['Arkansas']

如果只需要该值而没有键,则将unname函数添加到该值中,然后返回:

unname(getpostalcode[‘Arkansas’])

更新:您还可以使用getpostalcode[['Arkansas']]格式获得一个值,即使用双括号而不是添加unname() 感谢Peter Harrison 通过Twitter给出的提示 但是, Hadley Wickham指出 ,双括号格式仅适用于一个值。 如果您正在执行类似在数据框中创建新列的操作,请坚持使用unname()。

这里的所有都是它的。 我知道这是一个微不足道的示例,但是它在现实世界中有一定用途。 例如,当我处理美国人口普查数据时,我有一个FIPS代码的命名向量。

我从状态和FIPS代码的数据帧开始,这些代码称为fipsdf (下面的代码)。 接下来,我从数据框的fips代码列中创建了一个称为getfips的向量,并将状态添加为名称。

fipsdf <- rio::import("data/FIPS.csv")
getfips <- fipsdf$FIPS
names(getfips) <- fipsdf$State

现在,如果我想要马萨诸塞州的FIPS代码,则可以使用getfips['Massachusetts'] 。 我将添加unname()以获得不带名称的值: unname(getfips['Massachusetts'])

如果不得不继续使用unname()太烦人了,您甚至可以从查找表中做一些小功能:

get_state_fips <- function(state, lookupvector = getfips){
fipscode <- unname(lookupvector[state])
return(fipscode)
}

在这里,我对函数有两个参数。 一个是我的“钥匙”,在这种情况下是州名。 另一个是lookupvector ,默认为我的getfips矢量。

您会看到我如何使用该功能。 它只是带有一个参数的函数名称,即状态名称: get_state_fips("New York")

我可以制作一个看起来更通用的函数,例如

get_value <- function(mykey, mylookupvector){
myvalue <- mylookupvector[mykey]
myvalue <- unname(myvalue)
return(myvalue)
}

它具有函数的更通用名称,即get_value() ; 一个更通用的第一个参数名称, mykey和的第二个参数mylookupvector不拖欠任何东西。

我一直都在做同样的事情:使用lookupvector['key']从查找向量中获取值,然后运行unname()函数。 但这全都包裹在一个函数中。 因此,将其称为更优雅。

我可以将该函数与我创建的任何命名向量一起使用。 在这里,我将它与Arkansas和我的getpostalcode向量一起使用: get_value("Arkansas", getpostalcode)

在R中轻松查找! 请记住,名称必须唯一。 您可以重复 ,但不能重复

几年前,我第一次在Hadley Wickham的Advanced R书中看到了这个想法。 我仍然经常使用它,希望对您有所帮助。

创建带有邮政缩写的数据框的代码

postal_df <- data.frame(stringsAsFactors=FALSE,
State = c("Alabama", "Alaska", "Arizona", "Arkansas", "California",
"Colorado", "Connecticut", "Delaware", "Florida", "Georgia",
"Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas",
"Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts",
"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico",
"New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina",
"South Dakota", "Tennessee", "Texas", "Utah", "Vermont",
"Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"),
PostalCode = c("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
"HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
"NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD",
"TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY")
)

用FIPS代码创建数据框的代码

fipsdf <- data.frame(State = c("Alabama", "Alaska", "Arizona", "Arkansas",
"California", "Colorado", "Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa",
"Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts",
"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico",
"New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma",
"Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota",
"Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington",
"West Virginia", "Wisconsin", "Wyoming"), FIPS = c("01", "02",
"04", "05", "06", "08", "09", "10", "12", "13", "15", "16", "17",
"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28",
"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
"40", "41", "42", "44", "45", "46", "47", "48", "49", "50", "51",
"53", "54", "55", "56"), stringsAsFactors = FALSE)

翻译自: https://www.infoworld.com/article/3323006/do-more-with-r-quick-lookup-tables-using-named-vectors.html

r语言给向量命名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值