猿问

如何在R中完成VLOOKUP和填充(如Excel)?

如何在R中完成VLOOKUP和填充(如Excel)?

我有一个大约105000行30列的数据集。我有一个分类变量,我想把它分配给一个数字。在Excel中,我可能会用VLOOKUP然后填满。


我要怎么做同样的事R?


本质上,我所拥有的是HouseType变量,我需要计算HouseTypeNo..以下是一些样本数据:


HouseType HouseTypeNo

Semi            1

Single          2

Row             3

Single          2

Apartment       4

Apartment       4

Row             3


30秒到达战场
浏览 860回答 3
3回答

潇湘沐

如果我正确理解了您的问题,下面是四种方法来完成与Excel相同的操作VLOOKUP然后用R:#&nbsp;load&nbsp;sample&nbsp;data&nbsp;from&nbsp;Qhous&nbsp;<-&nbsp;read.table(header&nbsp;=&nbsp;TRUE,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringsAsFactors&nbsp;=&nbsp;FALSE,&nbsp;text="HouseType&nbsp;HouseTypeNo Semi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 Single&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 Row&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 Single&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 Apartment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 Apartment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 Row&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3")#&nbsp;create&nbsp;a&nbsp;toy&nbsp;large&nbsp;table&nbsp;with&nbsp;a&nbsp;'HouseType'&nbsp;column&nbsp;#&nbsp;but&nbsp;no&nbsp;'HouseTypeNo'&nbsp;column&nbsp;(yet)largetable&nbsp;<-&nbsp;data.frame( HouseType&nbsp;=&nbsp;as.character(sample(unique(hous$HouseType),&nbsp;1000,&nbsp;replace&nbsp;=&nbsp;TRUE)),&nbsp;stringsAsFactors&nbsp;=&nbsp;FALSE)#&nbsp;create&nbsp;a&nbsp;lookup&nbsp;table&nbsp;to&nbsp;get&nbsp;t he&nbsp;numbers&nbsp;to&nbsp;fill#&nbsp;the&nbsp;large&nbsp;tablelookup&nbsp;<-&nbsp;unique(hous) &nbsp;&nbsp;HouseType&nbsp;HouseTypeNo1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Semi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;Single&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Row&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;35&nbsp;Apartment&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4下面是四种方法来填充HouseTypeNo在largetable中的值。lookup表:先与merge基地:#&nbsp;1.&nbsp;using&nbsp;base&nbsp;base1&nbsp;<-&nbsp;(merge(lookup,&nbsp;largetable,&nbsp;by&nbsp;=&nbsp;'HouseType'))第二种方法,基中有命名向量:#&nbsp;2.&nbsp;using&nbsp;base&nbsp;and&nbsp;a&nbsp;named&nbsp;vectorhousenames&nbsp;<-&nbsp;as.numeric(1:length(unique(hous$HouseType)))names(housenames)&nbsp;<-&nbsp;unique(hous$HouseType)base2 &nbsp;<-&nbsp;data.frame(HouseType&nbsp;=&nbsp;largetable$HouseType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HouseTypeNo&nbsp;=&nbsp;(housenames[largetable$HouseType]))第三,使用plyr一揽子:#&nbsp;3.&nbsp;using&nbsp;the&nbsp;plyr&nbsp;packagelibrary(plyr)plyr1&nbsp;<-&nbsp;join(largetable,&nbsp;lookup,&nbsp;by&nbsp;=&nbsp;"HouseType")第四,使用sqldf包装#&nbsp;4.&nbsp;using&nbsp;the&nbsp;sqldf&nbsp;packagelibrary(sqldf)sqldf1&nbsp;<-&nbsp;sqldf("SELECT&nbsp;largetable.HouseType,&nbsp;lookup.HouseTypeNo FROM&nbsp;largetable INNER&nbsp;JOIN&nbsp;lookup ON&nbsp;largetable.HouseType&nbsp;=&nbsp;lookup.HouseType")如果有可能有些人在largetable不存在于lookup然后使用左联接:sqldf("select&nbsp;*&nbsp;from&nbsp;largetable&nbsp;left&nbsp;join&nbsp;lookup&nbsp;using&nbsp;(HouseType)")对其他解决方案也需要相应的修改。这就是你想做的吗?让我知道你喜欢哪种方法,我会添加评论。

手掌心

我想你也可以用match():largetable$HouseTypeNo&nbsp;<-&nbsp;with(lookup, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HouseTypeNo[match(largetable$HouseType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HouseType)])如果我按…的顺序排列,这仍然有效。lookup.

不负相思意

我也喜欢用qdapTools::lookup或速记二进制运算符%l%..它的工作原理与ExcelVLOOKUP相同,但它接受与列号相反的名称参数。##&nbsp;Replicate&nbsp;Ben's&nbsp;data:hous&nbsp;<-&nbsp;structure(list(HouseType&nbsp;=&nbsp;c("Semi",&nbsp;"Single",&nbsp;"Row",&nbsp;"Single",&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"Apartment",&nbsp;"Apartment",&nbsp;"Row"),&nbsp;HouseTypeNo&nbsp;=&nbsp;c(1L,&nbsp;2L,&nbsp;3L,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;2L,&nbsp;4L,&nbsp;4L,&nbsp;3L)),&nbsp;.Names&nbsp;=&nbsp;c("HouseType",&nbsp;"HouseTypeNo"),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;=&nbsp;"data.frame",&nbsp;row.names&nbsp;=&nbsp;c(NA,&nbsp;-7L))largetable&nbsp;<-&nbsp;data.frame(HouseType&nbsp;=&nbsp;as.character(sample(unique(hous$HouseType),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;1000,&nbsp;replace&nbsp;=&nbsp;TRUE)),&nbsp;stringsAsFactors&nbsp;=&nbsp;FALSE)##&nbsp;It's&nbsp;this&nbsp;simple:library(qdapTools)largetable[,&nbsp;1]&nbsp;%l%&nbsp;hous
随时随地看视频慕课网APP
我要回答