簡體   English   中英

如何從不完整的查詢表中更新數據?

[英]How do I update data from an incomplete lookup table?

我有一個表,該表使用唯一的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

我對如何在R中的相應查找表中用字符串替換data.frame列名的理解是,我應該能夠使用plyr::mapvalues但是從示例和文檔中我不清楚如何將id映射到name 我不只是想說“用'Mar'代替'March'”-我需要對每個查詢值說一下SET month_name = 'Mar' WHERE month_id = 3

我想你想要這個。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM