匹配数据框中的字符串的一部分,并用另一个数据框的条目替换它

时间:2018-07-18 09:11:55

标签: r dataframe

我对R相当陌生,并且遇到了以下问题。 假设我有以下数据帧:

sale_df <- data.frame("Cheese" = c("cheese-01", "cheese-02", "cheese-03"), "Number_of_sales" = c(4, 8, 23))
id_df <- data.frame("ID" = c(1, 2, 3), "Name" = c("Leerdammer", "Gouda", "Mozerella")  

我想要做的是将id_df的第一列的数字与sale_df的第一列的字符串中的数字匹配。

然后我想用sale_df的第二列中的值替换id_df中的值,即我希望cheese-01成为"Leerdammer"

有人知道我该如何解决吗?

3 个答案:

答案 0 :(得分:1)

使用tidyverse:

sale_df %>% mutate(ID=as.numeric(str_extract(Cheese,"(?<=cheese-).*"))) %>% inner_join(id_df,by="ID")

#     Cheese Number_of_sales ID       Name
#1 cheese-01               4  1 Leerdammer
#2 cheese-02               8  2      Gouda
#3 cheese-03              23  3  Mozerella

答案 1 :(得分:0)

假设Cheesesale_df的所有条目都以起司开头,这是一个简单的解决方案。

sale_df$CheeseID <- as.numeric(substring(sale_df$Cheese, 8))
merge(sale_df, id_df, by.x = "CheeseID", by.y = "ID", all.x = TRUE)

答案 2 :(得分:-1)

 sale_df$Number_of_sales=id_df$Name[match(id_df$ID,as.numeric(gsub("\\D","",sale_df$Cheese)))]
> sale_df
     Cheese Number_of_sales
1 cheese-01      Leerdammer
2 cheese-02           Gouda
3 cheese-03       Mozerella