楼主: wuchm
1989 9

[问答] 如何用R函数匹配两张表再进行运算,最后输出几个excel? [推广有奖]

  • 6关注
  • 1粉丝

博士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
2395 个
通用积分
4.5100
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
5181 点
帖子
230
精华
0
在线时间
236 小时
注册时间
2007-4-24
最后登录
2024-9-18

10论坛币

A表

B表

地区

产品

数量


地区

产品

价格

北美

1

100

北美

1

10

亚太

2

200

亚太

2

20

亚太

3

300

非洲

4

500






已知A/B两张表,先按照产品把B表的价格匹配到A表,然后新增收入列(数量*价格),最后按照不同地区将A表
分割几个excel分表:北美.csv  亚太.csv   非洲.csv,或者一个excel几个sheet表,怎么通过R函数写出来呢?

A表

地区

产品

数量

价格

收入

北美

1

100

10

1000

亚太

2

200

20

4000

亚太

3

300

非洲

4

500




最佳答案

jz.mraz 查看完整内容

Reduce(function(x,y) merge(x, y, all.x=TRUE), list(dat1, dat2, dat3, dat4, dat5)) Reduce函数将function逐个应用于: dat1, dat2 --> temp1 temp1, dat3 --> temp2 temp2, dat4 --> temp3 temp3, dat5 --> temp4 以此类推 抱歉一直没看到你的回复
关键词:EXCEL xcel exce 如何用 cel excel 非洲 如何 产品
沙发
jz.mraz 在职认证  发表于 2015-2-25 14:51:01 |只看作者 |坛友微信交流群
wuchm 发表于 2015-2-26 10:25
明白了。
现在是合并两个表,如果合并5个表,可以一次合并吗?是不是把五个表放在一个merge函数里呢?
Reduce(function(x,y) merge(x, y, all.x=TRUE), list(dat1, dat2, dat3, dat4, dat5))

Reduce函数将function逐个应用于:
dat1, dat2 --> temp1
temp1, dat3 --> temp2
temp2, dat4 --> temp3
temp3, dat5 --> temp4
以此类推

抱歉一直没看到你的回复

使用道具

藤椅
nuomin 发表于 2015-2-25 19:16:30 |只看作者 |坛友微信交流群
merge()

使用道具

板凳
jz.mraz 在职认证  发表于 2015-2-25 21:15:27 |只看作者 |坛友微信交流群
  1. #匹配A/B表
  2. f <- merge(dat, dat2, by=c('地区', '产品'),all.x=TRUE, all.y=TRUE)
  3. #新增收入列
  4. f $ '收入' <- f[,3] * f[,4]
  5. #分割并保存为几个csv在f盘下:
  6. sapply(split(f, f[,1]), function(x) write.csv(x, paste0('f:/',x[1,1])))
复制代码

使用道具

报纸
ntsean 发表于 2015-2-26 06:51:53 |只看作者 |坛友微信交流群
dplyr:::left_join()

使用道具

地板
wuchm 发表于 2015-2-26 08:57:37 |只看作者 |坛友微信交流群
jz.mraz 发表于 2015-2-25 21:15
谢谢!
这样合并,是把两个表的所有行都合起来了吧。
如果想以第一个表为基础,匹配第二表呢?就是类似excel的vloooup功能。

谢谢!

使用道具

7
jz.mraz 在职认证  发表于 2015-2-26 09:09:01 |只看作者 |坛友微信交流群
wuchm 发表于 2015-2-26 08:57
谢谢!
这样合并,是把两个表的所有行都合起来了吧。
如果想以第一个表为基础,匹配第二表呢?就是类似 ...
意思就是保留第一个表的所有,保留第二个表中存在在第一个表的内容?
all.x 和 all.y 都是FALSE的时候是只保留两个表中相互匹配的内容
all.x=TRUE, all.y=FALSE 是保留第一个的全部,第二个的匹配内容
反之亦然

使用道具

8
wuchm 发表于 2015-2-26 10:25:16 |只看作者 |坛友微信交流群
jz.mraz 发表于 2015-2-26 09:09
意思就是保留第一个表的所有,保留第二个表中存在在第一个表的内容?
all.x 和 all.y 都是FALSE的时候是 ...
明白了。
现在是合并两个表,如果合并5个表,可以一次合并吗?是不是把五个表放在一个merge函数里呢?

使用道具

9
wuchm 发表于 2015-2-27 14:47:37 |只看作者 |坛友微信交流群
jz.mraz 发表于 2015-2-25 14:51
Reduce(function(x,y) merge(x, y, all.x=TRUE), list(dat1, dat2, dat3, dat4, dat5))

Reduce函数将 ...
谢谢你的精彩回复。

另外再请教你个问题:R可以像excel那样,将一个excel几个sheet表分别导入R,将R中的几个数据表格导出到一个excel几个sheet存储呢?

使用道具

10
jz.mraz 在职认证  发表于 2015-3-2 10:17:44 |只看作者 |坛友微信交流群
[quote]wuchm 发表于 2015-2-27 14:47 http://www.r-bloggers.com/read-excel-files-from-r/

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 21:34