如何更新不完整查找表中的数据?

时间:2016-04-19 00:30:34

标签: r

我有一个表使用唯一ID但这些ID的可读名称不一致。它比月份名称更复杂,但为了一个更简单的例子,让我们说它看起来像这样:

demo_frame <- read.table(text=" Month_id Month_name Number
1   Jan 37
2   Feb 63
3   March   9
3   Mar 150
2   February    49", header=TRUE)

除了他们可能拼写“二月”或“三月”八种不同的方式。我还有一个干净的数据框,其中包含具有变体的名称的一致名称:

month_lookup <- read.table(text=" Month_id Month_name
2   Feb
3   Mar", header=TRUE)

我想谈谈这个问题:

1   Jan 37
2   Feb 63
3   Mar 9
3   Mar 150
2   Feb 49"

我尝试了merge(month_lookup, demo_frame, by = "Month_id"),但是因为查找表中不存在“Jan”而删除了所有1月份的值:

 Month_id Month_name.x Month_name.y Number
1        2          Feb          Feb     63
2        2          Feb     February     49
3        3          Mar        March      9
4        3          Mar          Mar    150

我对How to replace data.frame column names with string in corresponding lookup table in R的解读是,我应该能够使用plyr::mapvalues,但我不清楚有关如何将id映射到{{name的示例和文档1}}。我不只是想说“将'March'替换为'Mar'” - 我需要对查找中的每个值说SET month_name = 'Mar' WHERE month_id = 3

1 个答案:

答案 0 :(得分:0)

我想你想要这个。

library(dplyr)

demo_frame <- read.table(text=" Month_id Month_name Number
1   Jan 37
2   Feb 63
3   March   9
3   Mar 150
2   February    49", header=TRUE, stringsAsFactors = FALSE)

month_lookup <- read.table(text=" Month_id Month_name
2   Feb
3   Mar", header=TRUE, stringsAsFactors = FALSE)

result = 
  demo_frame %>%
  rename(bad_month = Month_name) %>%
  left_join(month_lookup) %>%
  mutate(month_fix =
           Month_name %>%
           is.na %>%
           ifelse(bad_month, Month_name) )