![](/img/trans.png)
[英]how do I replace numeric codes in a data frame with value labels from a (data.frame) lookup table?
[英]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.