楼主: ntwd87
2162 11

[问答] 矩阵数据合并的问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

67%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
996 点
帖子
64
精华
0
在线时间
93 小时
注册时间
2015-1-8
最后登录
2020-12-27

楼主
ntwd87 发表于 2015-2-5 17:47:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问,如果我有两个矩阵,第一列是ID,第二列是值。两个矩阵的ID不完全相同,现在要将矩阵2中矩阵1有的ID号的值赋值过去怎么处理方便?
举个例子:
matrix 1:
ID   VAL
1      0
2      0
3      0
4      0
matrix 2:
ID   VAL
1      2
3      3
5      0
6      0

希望得到的矩阵是:
ID   VAL
1      2
2      0
3      3
4      0


万分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据合并 matrix 万分感谢 怎么处理 Mat matrix

沙发
358463121 发表于 2015-2-5 18:22:13
  1. > m1=matrix(c(1:4,5,6,7,8),ncol=2)
  2. > m2=matrix(c(1,3,5,6,2,3,0,0),ncol=2)
  3. > m1
  4.      [,1] [,2]
  5. [1,]    1    5
  6. [2,]    2    6
  7. [3,]    3    7
  8. [4,]    4    8
  9. > m2
  10.      [,1] [,2]
  11. [1,]    1    2
  12. [2,]    3    3
  13. [3,]    5    0
  14. [4,]    6    0
  15. > m1[m1[,1]%in%m2[,1],2] <-m2[m2[,1]%in%m1[,1],2]
  16. > m1
  17.      [,1] [,2]
  18. [1,]    1    2
  19. [2,]    2    6
  20. [3,]    3    3
  21. [4,]    4    8
复制代码
已有 1 人评分经验 收起 理由
oliyiyi + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

藤椅
ntwd87 发表于 2015-2-5 18:26:47
358463121 发表于 2015-2-5 18:22
非常感谢, 我脑子没转过来~

板凳
ntwd87 发表于 2015-2-5 18:32:49
358463121 发表于 2015-2-5 18:22
试了一下,还是不对,会按照顺序赋值,最后就乱了

报纸
358463121 发表于 2015-2-5 18:34:15
ntwd87 发表于 2015-2-5 18:32
试了一下,还是不对,会按照顺序赋值,最后就乱了
不会吧

地板
ntwd87 发表于 2015-2-5 18:38:08
358463121 发表于 2015-2-5 18:34
不会吧
我的数据比较大,试了一下,好像不能把m2中对应m1的行号的值赋值给m1,他会按照ID的顺序赋值

7
ntwd87 发表于 2015-2-5 18:38:11
358463121 发表于 2015-2-5 18:34
不会吧
我的数据比较大,试了一下,好像不能把m2中对应m1的行号的值赋值给m1,他会按照ID的顺序赋值

8
358463121 发表于 2015-2-5 18:41:08
ntwd87 发表于 2015-2-5 18:38
我的数据比较大,试了一下,好像不能把m2中对应m1的行号的值赋值给m1,他会按照ID的顺序赋值
我觉得是你可能写错了我的代码,你仔细检查一下
m1[m1[,1]%in%m2[,1],2] <-m2[m2[,1]%in%m1[,1],2]
它的顺序是 m1 m1 m2 ,m2 m2 m1

9
yywan0913 在职认证  发表于 2015-2-6 09:26:23
358463121 发表于 2015-2-5 18:41
我觉得是你可能写错了我的代码,你仔细检查一下
m1[m1[,1]%in%m2[,1],2]
的确是有问题,  %in% 返回值是排序后的值,或者交集后的原顺序值,你把m2的ID为1和3反写即可发现问题。
    %in%与 match  的不同还是挺多的。match匹配原位置对应的值,但ID必须唯一。

10
jiangbeilu 学生认证  发表于 2015-2-6 09:26:27
直接merge就可以了,哪里需要那么麻烦。
  1. > dat1<-data.frame(ID=1:4,VAL=0)
  2. > dat1
  3.   ID VAL
  4. 1  1   0
  5. 2  2   0
  6. 3  3   0
  7. 4  4   0
  8. > dat2<-data.frame(ID=c(1,3,5,6),val=c(2,3,0,0))
  9. > dat2
  10.   ID val
  11. 1  1   2
  12. 2  3   3
  13. 3  5   0
  14. 4  6   0
  15. > merge(dat1,dat2,by="ID")
  16.   ID VAL val
  17. 1  1   0   2
  18. 2  3   0   3
复制代码

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

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