首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用条件语句一步合并具有不同标准的多个数据帧

如何使用条件语句一步合并具有不同标准的多个数据帧
EN

Stack Overflow用户
提问于 2016-06-15 18:26:27
回答 2查看 197关注 0票数 1

我目前正在使用下面列出的四个多个数据框架。

  • tmp:主表(变量包括:组、权重、国家、收入)
  • price1:第1-3组的价格表1(变量包括:组、重量、价格)
  • price2:第4-8组的价格表2(变量包括:组,价格)
  • price3:第9组的价格表3(变量包括:组、国家、重量、价格)

“权重”是从1到200之间的整数变量。在价目表1和3中,每个“权重”都有一个价格值。

我想保持原样的主表,并有条件地将价格表1,2,3合并到它。主表中的“组”变量范围从1到9。价格表也是根据“组”值管理的。每个值代表一个产品。同一价格表中的产品具有相似的性质和不同的价格。然而,跨价格表的产品具有不同的性质。由于这种差异,合并标准也不同。

这种合并的目的是比较不同产品的收入和价格。

以下是母版表和3份价格表之间的合并标准。

  • 价格表1到主表的主键:组和权重
  • 价格表2中的主键到主表:组
  • 价格表3到主表的主键:组和国家及权重

使用的代码:

代码语言:javascript
复制
test <- ifelse(tmp$group %in% c(1,2,3), merge(tmp,price1,by=c("group","weight"))
            ,ifelse(tmp$group %in% c(4,5,6,7,8),merge(tmp, price2, by= "group")
                   ,merge(tmp,price3, by=c("group","country","weight")))))

我的代码的问题是返回对象不是数据帧,它在R中显示为一个大列表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-16 02:47:54

如果我没有理解错,你是在data.frames价格的主机上查找产品的价格。由于这些组在您的示例中是唯一的,所以最好先合并价格data.frames,然后再与主数据合并。

数据:

代码语言:javascript
复制
price1 <- data.frame(group=1:3, weight=sample(1:200, 3, replace=T), price=abs(rnorm(3, 15, 1)))
price2 <- data.frame(group=4:8, price=abs(rnorm(5, 15, 1)))
price3 <- data.frame(group=9, country="A", weight=sample(1:200, 1), price=abs(rnorm(1, 15, 1)))
tmp <- data.frame(group=1:10, weight=sample(1:200, 10, replace=T), country=sample(LETTERS, 10, replace=T), revenue=abs(rnorm(10, 150, 2)))

将三个价格data.frame与plyr::ldply合并

代码语言:javascript
复制
library(plyr)
price <- plyr::ldply(list(price1, price2, price3))

仅保留合并价格data.frame的两列:

代码语言:javascript
复制
library(dplyr)
price <- price %>% select(price, group)

加入主data.frame并按组列出价格

代码语言:javascript
复制
output <- tmp %>% left_join(price, by="group")
   group weight country  revenue    price
1      1    196       N 149.4803 15.52752
2      2     55       L 150.3930 15.98541
3      3     78       E 150.6139 14.95468
4      4     62       D 151.4679 16.51612
5      5    107       Q 149.3292 15.59761
6      6    168       C 148.8256 14.49331
7      7    193       L 149.0341 16.31310
8      8     18       X 152.9192 14.06301
9      9    113       O 147.0069 14.08821
10    10    197       H 149.3581       NA
票数 0
EN

Stack Overflow用户

发布于 2016-06-16 03:45:07

考虑子设置的tmp dataframes上的行绑定,每个数据绑定都与价格数据绑定合并:

代码语言:javascript
复制
test <- rbind(merge(tmp[tmp$group %in% c(1,2,3),], price1, by=c("group","weight")),
              merge(tmp[tmp$group %in% c(4,5,6,7,8),], price2, by="group"),
              merge(tmp[tmp$group == 9,], price3, by=c("group","country","weight")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37843084

复制
相关文章

相似问题

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