我对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"
。
有人知道我该如何解决吗?
答案 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)
假设Cheese
中sale_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