【问题标题】:How do I update data from an incomplete lookup table?如何从不完整的查找表中更新数据?
【发布时间】:2016-04-19 00:30:34
【问题描述】:

我有一个使用唯一 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)

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

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”,因此删除了所有一月份的值:

 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

我对@9​​87654321@ 的阅读是我应该能够使用plyr::mapvalues,但我从示例和文档中不清楚如何将id 映射到name。我不只是想说“用'Mar'替换'March'”——我需要为查找中的每个值说SET month_name = 'Mar' WHERE month_id = 3

【问题讨论】:

  • 为什么不把两张表合并在一起?
  • 对不起。应该包括merge 失败的地方。固定。
  • 只需将 Jan 添加到查找表中?使用data.frame(month.abb = month.abb, Month_id = 1:12) 可以轻松生成查找表

标签: r


【解决方案1】:

我想你想要这个。

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) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多