楼主: 迷途mitu
12389 9

[问答] 在R里面两个矩阵按一个矩阵的一列来排序 [推广有奖]

  • 5关注
  • 11粉丝

已卖:142份资源

教授

23%

还不是VIP/贵宾

-

威望
0
论坛币
2399 个
通用积分
21.3486
学术水平
11 点
热心指数
35 点
信用等级
12 点
经验
173 点
帖子
582
精华
0
在线时间
851 小时
注册时间
2010-4-17
最后登录
2022-12-7

楼主
迷途mitu 发表于 2014-8-20 15:06:07 |AI写论文
100论坛币
我有两个矩阵如下:A:
1   20130104 1.0024
2   20130107 1.0218
3   20130506 1.1723
4   20130507 1.1689
5   20130508 1.1764
6   20130509 1.1619
7   20130510 1.1654
8   20130513 1.1498
9   20130514 1.1135
10  20130515 1.1140
11  20130516 1.1723
12  20130517 1.1770
13  20130520 1.2110
14  20130521 1.2179
15  20130522 1.2214
16  20130523 1.1845
17  20130524 1.1943
18  20130527 1.1787
19  20130528 1.2468
20  20130529 1.2283
21  20130530 1.2237
22  20130531 1.2116
23  20130603 1.2070
24  20130604 1.2197
25  20130605 1.2012



B:
82  20130412 1.8587
39  20130415 1.8201
40  20130416 1.8394
41  20130417 1.8804
42  20130418 1.8169
43  20130419 1.8731
127 20130422 1.9310
87  20130423 1.8530
44  20130424 1.8756
200 20130425 1.8555
114 20130426 1.7654
45  20130502 1.6851
88  20130503 1.7163
46  20130506 1.7468

我想把A和B合并为一个矩阵,都按照A列的时间顺序排列,也就是说把B列中对应日期的值放在A列同一日期的行上,没有的数据就是NA。
循环我知道可以做到,但是由于数据量比较大,我想问问有没有简单的方法可以做到?

最佳答案

西皮皮 查看完整内容

用merge 先给你的A和B的两列一个名字,比如A中第一列为date,第二例为price。B第一列为D,二列为P mergedate
关键词:有没有

沙发
西皮皮 发表于 2014-8-20 15:06:08
用merge

先给你的A和B的两列一个名字,比如A中第一列为date,第二例为price。B第一列为D,二列为P
mergedate <- merge (A,B, by.x ="date", by.y =“D”)

藤椅
迷途mitu 发表于 2014-8-20 15:24:59
顶一下!!!!!!!!

板凳
西皮皮 发表于 2014-8-20 16:09:29
m1 <- merge(A, B, by.x = "date", by.y = "D",all =TRUE)

这样的话,没有的数据就会出现NA啦
我用我的电脑试了一下,是可以的

报纸
迷途mitu 发表于 2014-8-20 16:38:35
西皮皮 发表于 2014-8-20 16:09
m1
Error in fix.by(by.x, x) : 'by'必需指定唯一有效的列
这个x和y需要设定么?

地板
西皮皮 发表于 2014-8-20 16:41:36
你A表里的列明是什么。这个by.x 指的是按照A表里的那个去合并

7
ReneeD 发表于 2014-8-20 16:52:22
A:

xh   sj            z1
1   20130104 1.0024

B:
xh   sj             z2
82  20130412 1.8587

merge(A, B, by = "sj",all.A = TRUE)

8
一路嘿嘿 发表于 2014-8-20 22:16:34
  1. a <- data.frame(date=c(20130104,20130107,20130506),value=c(1.0024, 1.0218,1.1723))
  2. b <- data.frame(date=c(20130103,20130107,20130506),value=c(1.0024, 1.0218,1.1723))
  3. if (!require(dplyr))
  4.   install.packages("dplyr")
  5. a.b <- dplyr::left_join(a,b,by="date")
复制代码

9
ReneeD 发表于 2014-8-21 09:29:17
西皮皮 发表于 2014-8-20 16:09
m1
这个是 全连接,
你要的 难道不是 左连接么?

10
西皮皮 发表于 2014-8-21 09:42:21
ReneeD 发表于 2014-8-21 09:29
这个是 全连接,
你要的 难道不是 左连接么?
参数改一下就好了,主要用merge就可以了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 11:02