R:与其他特征向量匹配特征向量

问题描述:

不能环绕这个任务我心里R:与其他特征向量匹配特征向量

考虑一个数据帧“USA” 3列,“标题”,“城市”和“国家”(可重复) :

title <- c("Events in Chicago, September", "California hotels", 
       "Los Angeles, August", "Restaurant in Chicago") 
    city <- c("","", "Los Angeles", "Chicago") 
    state <- c("","", "California", "IL") 

    usa <-data.frame(title, city, state) 

造成这种:

       title  city  state 
    1 Events in Chicago, September      
    2   California hotels      
    3   Los Angeles, August Los Angeles California 
    4  Restaurant in Chicago  Chicago   IL 

现在我所要做的是填补了状态变量的第2个观察值,这是现在下落不明。

TITLE变量包含一条线索:在每个条目中提及城市或州。

我需要做到以下几点:

  1. 检查是否在“标题”列中的任何字在“城市”和“国家”栏中发现的任何意见一致;
  2. 如果“标题”中的任何单词与“状态”中的任何观察值相匹配,请将相同的状态粘贴到给定标题的观察值;
  3. 如果“标题”中的任何单词与“城市”中的任何观察值匹配,则将匹配的城市状态粘贴到标题行的“状态”列中。

所以我想最终是这样的:

       title  city  state 
    1 Events in Chicago, September      IL 
    2   California hotels    California   
    3   Los Angeles, August Los Angeles California 
    4  Restaurant in Chicago  Chicago   IL 

换句话说,第二行中的标题包含一个词“加州”,所以匹配状态从状态向量中。然而,在第一行中,“芝加哥”这个词是关键,数据框中还有另外一个条目(第4行),它将芝加哥与“IL”状态联系起来,所以“IL”必须粘贴在第一行行“状态”列。

等待社区的想法:)谢谢!

我建议你使用stringr包;具体而言,称为str_extract的功能。

如果您有完整的城市列表,例如city <- c("Los Angeles", "Chicago"),那么你可以使用paste(city, collapse = '|'将它变成正则表达式)。这会给你:'Los Angeles|Chicago'。与str_extract,你可以提取该城市(将提取它看到的第一个,如果没有出现,将提取一个NA)。这是完整的代码。 注:

# A tibble: 4 x 3 
         title  city  state 
         <chr>  <chr>  <chr> 
1 Events in Chicago, September  Chicago  <NA> 
2   California hotels  <NA> California 
3   Los Angeles, August Los Angeles California 
4  Restaurant in Chicago  Chicago   IL 
:如果你的数据帧是data_frame(tibble),而不是一个data.frame
(并不完全知道为什么,还没有研究它)

library(tidyverse) 
library(stringr) 

title <- c("Events in Chicago, September", "California hotels", 
      "Los Angeles, August", "Restaurant in Chicago") 
city <- c("","", "Los Angeles", "Chicago") 
state <- c("","", "California", "IL") 

usa <-data_frame(title, city, state) # notice this is a data_frame not data.frame 

cities <- paste(c("Los Angeles", "Chicago"), collapse = '|') 
states <- paste(c("California", "IL"), collapse = '|') 

usa <- usa %>% 
    mutate(city = ifelse(city == '', str_extract(title, cities), city), 
     state = ifelse(state == '', str_extract(title, states), state)) 

这导致这仅适用

+0

感谢您的关注!但是,我需要每行的状态值,这就是诀窍。而在第一线,你有NA的状态 – Denis

+0

那么这是一个简单的修复。你只需要有一张将所有城市映射到其状态的列表。 –

+0

再次感谢:)一个简单的问题 - 提到的数据是一个更大的数据框的一部分。我应该将所需的数据进行子集转换,采取您提出的所有步骤,然后将数据粘贴到初始数据框中? – Denis