加载中…
个人资料
的狗
的狗
  • 博客等级:
  • 博客积分:0
  • 博客访问:33,999
  • 关注人气:15
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

R语言里提取第二个文件前三列与第一个文件前3列相同的行

(2017-04-20 22:54:06)
标签:

it

r

sql

首先建立一个与第二个文件同样大小的空大数据框,以便循环时存放数据
s<-matrix(nrow=9,ncol=6)
> s<-as.data.frame(s)
遍历第一个文件与第二个文件,查找能对应的数据,返回第二个文件相对应的行存于s文件
for(j in 1:length(a[,1])){for(i in 1:length(b[,1])){if(b[i,1]==a[j,1]&b[i,2]==a[j,2]&b[i,3]==a[j,3]){s[i,]<-b[i,]}}}

complete.case或na.omit减掉NA项
> s
  V1 V2 V3 V4 V5 V6
1  1 11 21  1  2  3
2  2 12 22  1  2  3
3  3 13 23  1  2  3
4 NA NA NA NA NA NA
5 NA NA NA NA NA NA
6 NA NA NA NA NA NA
7 NA NA NA NA NA NA
8 NA NA NA NA NA NA
9 NA NA NA NA NA NA
注意如果三者不是并&而是或|的关系的话,计算中不要出现NA的数据;也可尝试sqldf包调用sql查询
sqldf("select b.* from a,b where a.V1=b.v1 and a.V2=b.V2 and a.V3=b.V3")
  V1 V2 V3 V4
1  1 11 21  2
2  2 12 22  3
3  3 13 23  4
4  1 11 21  2
注意这里的第四行是多余的,因为a表前三列有两个c(1,11,21)的行,所以b中第一行就被调用了两次;在上面R语言循环语句的方法中是不会出现这种情况的,看来用sql方法查询还要保证关键字段的唯一性。
还有merge函数,因为是引用两个表,如果关键字有重复,会遍历每种组合的可能性

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
后一篇:R求占比
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    后一篇 >R求占比
      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有