根据 R 中的部分字符串匹配(在另一个数据帧中)替换数据帧中的 NA

标签 r dataframe dplyr na string-matching

目标:根据另一个数据帧中的“键”更改一个数据帧中的一列 NA(类似于 VLookUp,但仅在 R 中除外)

这里给出 df1 (为了简单起见,我只有 6 行。我拥有的 key 是 50 行代表 50 个状态):

<表类=“s-表”> <标题> 索引 State_Name 缩写 <正文> 1 加利福尼亚州 CA 2 马里兰州 医学博士 3 纽约 纽约 4 德克萨斯州 发送 5 弗吉尼亚州 VA 6 华盛顿 西澳

这里给出 df2 (这只是一个例子。我正在使用的真实数据框有更多行):

<表类=“s-表”> <标题> 索引 状态 文章 <正文> 1 不适用 德克萨斯州州长艾伯特签署新的堕胎法案 2 不适用 罢免加州州长纽瑟姆的努力失去了动力 3 不适用 纽约州州长科莫被指控操纵 Covid-19 疗养院数据 4 不适用 Hogan(马里兰州共和党)宣布计划取消全州范围内的新冠限制 5 不适用 由于曼钦的反对,华盛顿不太可能成为州 6 不适用 亚马逊 HQ2 导致弗吉尼亚州北部房价飙升

任务:创建一个循环并读取每个 df2$Article 行中的状态的 R 函数;然后将其与 df1$State_Name 交叉引用,以根据 df2$Article 中的状态将 df2$State 中的 NA 替换为相应的 df1$Abbreviation 键。我知道这很拗口。我不知道如何开始和完成这个难题。硬编码不是一个选项,因为我有数千行这样的真实数据表,并且随着我们向文本抓取添加更多文章而更新。

输出应如下所示:

<表类=“s-表”> <标题> 索引 状态 文章 <正文> 1 发送 德克萨斯州州长艾伯特签署新的堕胎法案 2 CA 罢免加州州长纽瑟姆的努力失去了动力 3 纽约 纽约州州长科莫被指控操纵 Covid-19 疗养院数据 4 医学博士 Hogan(马里兰州共和党)宣布计划取消全州范围内的新冠限制 5 不适用 由于曼钦的反对,华盛顿不太可能成为州 6 VA 亚马逊 HQ2 导致弗吉尼亚州北部房价飙升

注意:带有 DC 的第五个条目旨在为 NA。

非常感谢任何指南链接和/或有关如何编码的任何建议。谢谢!

最佳答案

您可以从 State_Name 创建正则表达式模式,并使用 str_extractArticle 中提取它。使用matchdf1中获取相应的Abbreviation名称。

library(stringr)

df2$State <- df1$Abbreviation[match(str_extract(df2$Article, 
               str_c(df1$State_Name, collapse = '|')), df1$State_Name)]
df2$State
#[1] "TX" "CA" "NY" "MD" NA   "VA"

您还可以使用内置的 state.namestate.abb 而不是 df1 来获取州名称和缩写。


这是在 for 循环中执行此操作的方法 -

for(i in seq(nrow(df1))) {
  inds <- grep(df1$State_Name[i], df2$Article)
  if(length(inds)) df2$State[inds] <- df1$Abbreviation[i]
}
df2

#  Index State                                                                      Article
#1     1    TX                              Texas governor, Abbott, signs new abortion bill
#2     2    CA                     Effort to recall California governor Newsome loses steam
#3     3    NY New York governor, Cuomo, accused of manipulating Covid-19 nursing home data
#4     4    MD     Hogan (Maryland, R) announces plans to lift statewide Covid restrictions
#5     5  <NA>                                     DC statehood unlikely as Manchin opposes
#6     6    VA               Amazon HQ2 causing housing prices to soar in northern Virginia

关于根据 R 中的部分字符串匹配(在另一个数据帧中)替换数据帧中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67646081/

相关文章:

rdata 和 ggplot : specifying plot initial plot size?

python - 使用 ix 或 iloc 检查 pandas DataFrame 中的特定值(在单元格中)是否为 NaN 不工作

python - Pandas :在公共(public)列上添加两个数据框

r - dplyr 中的 DROP TABLE 命令

rbind tbl 和 df 给出过滤器错误

r - 用分组变量中存在的值替换 NA

r - 在循环内打印 gt 表,rmarkdown::render 不起作用

r - 更改条件以替换向量中的元素

r - 如何指向R包中的目录?

r - 将行值转换为 r 中的列名