楼主: skytreee
2802 8

[问答] 两表数据匹配 [推广有奖]

  • 0关注
  • 2粉丝

已卖:3份资源

讲师

13%

还不是VIP/贵宾

-

威望
0
论坛币
827 个
通用积分
12.7247
学术水平
2 点
热心指数
4 点
信用等级
2 点
经验
6543 点
帖子
225
精华
0
在线时间
370 小时
注册时间
2010-5-17
最后登录
2024-4-16

楼主
skytreee 发表于 2018-5-11 16:43:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位,请教大家一个问题:
已知表1:
xpre
1 0.1
2 0.2
3 0.3
4 0.4
表2:
x_1 pre_1x2 pre_2
1 2
4 4
3 1
1 2
2 3


根据表1,将表2中变量x_1与x_2的值与表1中变量x对应,填充上对应pre的值。
如何操作呢?

我在想用merge来做,但是,表2中值的顺序会变化,因为merge结果默认按照从小到大的顺序输出的,我需要按照表2的顺序输出结果。



二维码

扫码加我 拉你入群

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

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

关键词:数据匹配 请教大家一个问题 Merge 输出结果 从小到大 关联表 匹配

沙发
xwan288 发表于 2018-5-11 17:35:20
  1. library(dplyr)

  2. temp = data.frame(c(1,2,3,4),c(0.1,0.2,0.3,0.4))
  3. colnames(temp)=c("x","pre")

  4. foo = data.frame(c(1,4,3,2))
  5. colnames(foo) = "x1"

  6. result = inner_join(x = foo, y = temp, c("x1" = "x"))
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
skytreee + 5 + 3 + 3 + 3 观点有启发
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 15  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
rainningpoet 发表于 2018-5-11 17:36:36
library(dplyr)
library(sqldf)
data2_v2=cbind(data2,order2=1:nrow(data2))

data3=sqldf("select t1.x_1,t2.pre as pre_1
             t1.x2,t3.pre as pre_2
            from data2_v2 t1 left join data1 t2 on t1.x_1=t2.x
            left join data1 t3 on t1.x2=t3.x")%>%arrange(order2)%>%select(-order2)

已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
skytreee + 5 + 3 + 3 + 3 观点有启发
cheetahfly + 10 热心帮助其他会员
xwan288 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 15  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

板凳
屋檐滴语 发表于 2018-5-13 23:54:49
  1. library(dplyr)
  2. df1 = data.frame(x=c(1,2,3,4),pre=c(0.1,0.2,0.3,0.4))
  3. df2 = data.frame(x=c(1,4,3,1,2,2,4,1,2,3))
  4. df2 %>%
  5.   left_join(df1,by="x")->df
  6. head(df,nrow(df)/2) %>%
  7.   cbind(tail(df,nrow(df)/2))->result
  8. colnames(result)=c("x_1","pre_1","x_2","pre_2")
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
skytreee + 5 + 3 + 3 + 3 精彩帖子
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 15  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

报纸
屋檐滴语 发表于 2018-5-13 23:57:54
把你的表2改造下,处理完了再改回来。表2不符合表设计范式。

地板
skytreee 发表于 2018-5-14 14:10:58
屋檐滴语 发表于 2018-5-13 23:54
非常感谢!代码很好理解,只用dplyr包就可解决。

7
skytreee 发表于 2018-5-14 14:11:53
xwan288 发表于 2018-5-11 17:35
谢谢,看来我要学下dplyr包了

8
skytreee 发表于 2018-5-14 14:13:27
rainningpoet 发表于 2018-5-11 17:36
library(dplyr)
library(sqldf)
data2_v2=cbind(data2,order2=1:nrow(data2))
非常感谢,对于熟悉数据库的人来讲,代码很好用。

9
BG4IMP 发表于 2018-5-15 15:01:53
表2$pre_1=表1$pre[match(表2$x_1,表1$x)]

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 10:27