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变量包含一条线索:在每个条目中提及城市或州。
我需要做到以下几点:
- 检查是否在“标题”列中的任何字在“城市”和“国家”栏中发现的任何意见一致;
- 如果“标题”中的任何单词与“状态”中的任何观察值相匹配,请将相同的状态粘贴到给定标题的观察值;
- 如果“标题”中的任何单词与“城市”中的任何观察值匹配,则将匹配的城市状态粘贴到标题行的“状态”列中。
所以我想最终是这样的:
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))
这导致这仅适用
感谢您的关注!但是,我需要每行的状态值,这就是诀窍。而在第一线,你有NA的状态 – Denis
那么这是一个简单的修复。你只需要有一张将所有城市映射到其状态的列表。 –
再次感谢:)一个简单的问题 - 提到的数据是一个更大的数据框的一部分。我应该将所需的数据进行子集转换,采取您提出的所有步骤,然后将数据粘贴到初始数据框中? – Denis