我在从字符串列表到数据帧的部分匹配方面遇到了问题。
我的df有这样的结构:
> df
mrun address stat
8988741 cerro pedregal 8536 , Antofagasta, Antofagasta OK
17625851 rancagua 2777 , Iquique, Tarapacá OK
9423953 picarte 4100 , Valdivia, Los Ríos OK
3459140 balmaceda 935 , Temuco, La Araucanía OK
24507700 rancagua 1940, La Serena, Coquimbo OK
我有一个包含此值的字符串列表:
> address_list
c("balmaceda", "rancagua", "bombero garrido")
如何选择与列表中的任何元素匹配的行?
这是我的愿望输出:
> df_solution
mrun address stat
17625851 rancagua 2777 , Iquique, Tarapacá OK
3459140 balmaceda 935 , Temuco, La Araucanía OK
24507700 rancagua 1940, La Serena, Coquimbo OK
编辑:saurav shekhar提供的解决方案适用于包含少量元素的address_list。在我的情况下,我的真实address_list有5000行以上,df有200000行,grep会抛出这个错误:
> df$flag[grep(address_list,df$address)]<- 1
Error in grep(address_list,df$address) :
invalid regular expression, reason 'Out of memory'
我有很多内存,所以我不会考虑它。我找了一个解决方案,但我没有找到任何办法。 SO中唯一的密切线索是this link,但我不知道如何申请我的案例。
我的会话信息:
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Spanish_Latin America.1252 LC_CTYPE=Spanish_Latin America.1252
[3] LC_MONETARY=Spanish_Latin America.1252 LC_NUMERIC=C
[5] LC_TIME=Spanish_Latin America.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gridExtra_2.2.1 ggplot2_2.2.0 plyr_1.8.4 reshape_0.8.6
答案 0 :(得分:0)
您需要做的第一件事是以下列格式创建匹配变量:
address_list<- paste(address_list, collapse = ",")
address_list<- gsub("," , "|" , address_list)
address_list<- c("balmaceda|rancagua|bombero|garrido")
然后使用grep
,您可以对数据进行部分匹配,并为要保留的行创建标记。
# grep(address_list,df$address) Try this and note the output for your understanding of `grep`
df$flag<- NA
df$flag[grep(address_list,df$address)]<- 1 #flag rows with matching values
df_new<- df[which(df$flag==1),]