首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用merge或match函数匹配R中两个数据帧中的多个列

使用merge或match函数匹配R中两个数据帧中的多个列
EN

Stack Overflow用户
提问于 2017-08-10 21:32:17
回答 2查看 1.2K关注 0票数 1

我有两个数据框,看起来像这样:

代码语言:javascript
运行
复制
Date        Shop    Item    ProductKey     Price
2014-09-01  Asda    Apple   0f-7c-32-9c65  2.00
2014-09-01  Tesco   Pear    7c-e9-a0-a11c  1.50

以此类推,针对不同的日期、店铺、商品、产品密钥和价格。数据帧2具有相同的结构,但用于下一年。

我想要做的是在两个不同的数据框(称为September2014和September2015)中匹配具有相同日期、商店、项目和产品关键字的项目-当它们在所有变量上匹配时,创建相对价格(即,将2015年的价格除以2014年的价格)。

我尝试了各种if语句和match函数,但似乎没有任何效果。我知道一定有一种简单的方法可以做到这一点,但我完全没有做到。任何帮助都将不胜感激。我还查看了合并函数的示例,但我不认为这对我的情况有用。我已经在网站上提出了很多关于匹配的问题,并尝试使用一些建议的代码,但同样,似乎没有一个与我的情况相关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-10 21:59:30

重新考虑merge方法:

代码语言:javascript
运行
复制
# FIRST DATAFRAME (2014)
txt='Date        Shop    Item    ProductKey     Price
2014-09-01  Asda    Apple   0f-7c-32-9c65  2.00
2014-09-01  Tesco   Pear    7c-e9-a0-a11c  1.50'

df1 <- read.table(text=txt, header=TRUE)
df1$Date <- as.POSIXct(df1$Date)             # CONVERT TO DATE
df1$Month <- format(df1$Date, "%m")          # EXTRACT MONTH (CAN ADJUST FOR MM/DD)

# SECOND DATAFRAME (2015)
txt='Date        Shop    Item    ProductKey     Price
2015-09-01  Asda    Apple   0f-7c-32-9c65  2.25
2015-09-01  Tesco   Pear    7c-e9-a0-a11c  1.75'

df2 <- read.table(text=txt, header=TRUE)
df2$Date <- as.POSIXct(df2$Date)              # CONVERT TO DATE
df2$Month <- format(df2$Date, "%m")           # EXTRACT MONTH (CAN ADJUST FOR MM/DD)

# MERGE AND TRANSFORM FOR NEW COLUMN
finaldf <- transform(merge(df1, df2, by=c("Month", "Shop", "Item", "ProductKey"), suffixes=c("_14", "_15")), 
                     PriceRelative = Price_15 / Price_14)    
finaldf
#   Month  Shop  Item    ProductKey    Date_14 Price_14    Date_15 Price_15 PriceRelative
# 1    09  Asda Apple 0f-7c-32-9c65 2014-09-01      2.0 2015-09-01     2.25      1.125000
# 2    09 Tesco  Pear 7c-e9-a0-a11c 2014-09-01      1.5 2015-09-01     1.75      1.166667
票数 2
EN

Stack Overflow用户

发布于 2017-08-10 21:51:28

2014和2015年的价格。请注意,2015年有一个项目无法与2014年的项目相匹配。首先生成一个散列作为关键字,然后进行匹配,将2014年的商品价格导入到2015年的数据框架中。然后划分:

代码语言:javascript
运行
复制
df2014 <- data.frame(Date = as.Date(c("2014-09-01", "2014-09-01")),
                     Shop = c("Asda", "Tesco"),
                     Item = c("Apple", "Pear"),
                     ProductKey = c("0f-7c-32-9c65","7c-e9-a0-a11c"),
                     Price = c(2.00, 1.50), stringsAsFactors = FALSE)

df2015 <- data.frame(Date = as.Date(c("2015-09-01", "2015-09-01", "2015-09-01")),
                     Shop = c("Asda", "Tesco", "foo"),
                     Item = c("Apple", "Pear", "Orange"),
                     ProductKey = c("0f-7c-32-9c65","7c-e9-a0-a11c", "blah"),
                     Price = c(2.20, 1.70, 3.00), stringsAsFactors = FALSE)

df2014$key <- paste0(strftime(df2014$Date, "%m"),
                     strftime(df2014$Date, "%d"),
                     df2014$Shop,
                     df2014$Item,
                     df2014$ProductKey)

df2015$key <- paste0(strftime(df2015$Date, "%m"),
                     strftime(df2015$Date, "%d"),
                     df2015$Shop,
                     df2015$Item,
                     df2015$ProductKey)

df2015$price_2014 <- df2014$Price[match(df2015$key, df2014$key)]
df2015$price_ratio <- df2015$Price/df2015$price_2014
df2015
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45615227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档