目标:根据另一个数据帧中的“键”更改一个数据帧中的一列 NA(类似于 VLookUp,但仅在 R 中除外)
这里给出 df1 (为了简单起见,我只有 6 行。我拥有的 key 是 50 行代表 50 个状态):
这里给出 df2 (这只是一个例子。我正在使用的真实数据框有更多行):
任务:创建一个循环并读取每个 df2$Article 行中的状态的 R 函数;然后将其与 df1$State_Name 交叉引用,以根据 df2$Article 中的状态将 df2$State 中的 NA 替换为相应的 df1$Abbreviation 键。我知道这很拗口。我不知道如何开始和完成这个难题。硬编码不是一个选项,因为我有数千行这样的真实数据表,并且随着我们向文本抓取添加更多文章而更新。
输出应如下所示:
注意:带有 DC 的第五个条目旨在为 NA。
非常感谢任何指南链接和/或有关如何编码的任何建议。谢谢!
最佳答案
您可以从 State_Name
创建正则表达式模式,并使用 str_extract
从 Article
中提取它。使用match
从df1
中获取相应的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.name
和 state.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/