楼主: ailvtu
7219 7

[问答] data.frame 相同值的抽取合并 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

初中生

66%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
84 点
帖子
12
精华
0
在线时间
14 小时
注册时间
2015-4-9
最后登录
2015-4-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在有两个data.frame 每个两列,完成的功能是在第2个data.frame第一列找到在第1个data.fram第一列出现的元素,对应地取出第2个data.fram第2列的值,然后合并到第2个data.frame第3列。不要用循环,请问R里有没相关函数。R新手虚心求教!!!

二维码

扫码加我 拉你入群

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

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

关键词:Frame Fram Data FRA RAM 元素

沙发
shenyu2070 在职认证  发表于 2015-4-22 10:21:07 |只看作者 |坛友微信交流群
我是这么猜测你的描述的哈:两个数据库: A,B
其中A的两列分别是  x1、x2
B的两列分别是:  x1、x3,

现在你想把相同的x1的值进行匹配嘛,可以考虑用 merge这个函数,比如你现在相把B的x3赋值到A中去,你用merge(A, B, all.x=T)就可以了。

但是我再仔细看你的描述,你是想将B中重复的值再复制成为新的一列,比如x4。
你可以采用这个方法:  首先找到重复的值,然后呢,再用merge反赋值回去。

具体的操作如下:
  xx<-A$x1   #### 找到A中的名称
  C<-B[B$x1%in%xx,]    #### 在B中找到A中相同的名称的数据
  #### 为了匹配,所以这时候你需要将C的名称进行相应修改,不然到时候可能会匹配错误。

  names(C)<-c("x1","x4")

#### 然后再匹配就好了哈

d<-merge(B,C,all.x=T)

  #### d数据就是按照你的要求,把在A中相同的x1的数据进行匹配到第三列了

######## 不用谢我,请叫我雷锋,呵呵呵呵呵!
已有 1 人评分论坛币 收起 理由
李会超 + 10 奖励雷锋

总评分: 论坛币 + 10   查看全部评分

使用道具

藤椅
jackylee2010 发表于 2015-4-22 10:23:35 |只看作者 |坛友微信交流群
可以把两个data.frame 每个两列 合并。到一个data.frame。 然后,比较 。如果相同就取值。这样可以不。

使用道具

板凳
katymeala 发表于 2015-4-22 14:21:42 |只看作者 |坛友微信交流群
you need the function merge()
here is an example:

data1<-data.frame(a=letters[1:3],b=1:3)
data1<-data.frame(a=letters[2:4],b=4:6)
merge(data1,data2,by='letter')   ## this shows only the intersection between two data
merge(data1,data2,by='letter',all.x=TRUE)  ##this shows all the certain column in data1
merge(data1,data2,by='letter',all.y=TRUE)  ##this shows all the certain column in data2
Also, if data1 and data 2 do not have the same column name like 'letter' you can try by.x by.y
More information,try ?merge
已有 1 人评分论坛币 收起 理由
admin_kefu + 15 热心帮助其他会员

总评分: 论坛币 + 15   查看全部评分

使用道具

报纸
ailvtu 发表于 2015-4-22 17:06:47 |只看作者 |坛友微信交流群
shenyu2070 发表于 2015-4-22 10:21
我是这么猜测你的描述的哈:两个数据库: A,B
其中A的两列分别是  x1、x2
B的两列分别是:  x1、x3,
谢谢!雷锋!!

使用道具

地板
ailvtu 发表于 2015-4-22 17:07:25 |只看作者 |坛友微信交流群
katymeala 发表于 2015-4-22 14:21
you need the function merge()
here is an example:
谢谢!

使用道具

7
ailvtu 发表于 2015-4-22 17:08:03 |只看作者 |坛友微信交流群
shenyu2070 发表于 2015-4-22 10:21
我是这么猜测你的描述的哈:两个数据库: A,B
其中A的两列分别是  x1、x2
B的两列分别是:  x1、x3,
谢谢!雷锋!!

使用道具

8
ailvtu 发表于 2015-4-22 17:08:59 |只看作者 |坛友微信交流群
jackylee2010 发表于 2015-4-22 10:23
可以把两个data.frame 每个两列 合并。到一个data.frame。 然后,比较 。如果相同就取值。这样可以不。
已经用自己的方法解决,还是谢谢你!

使用道具

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

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

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

GMT+8, 2024-5-11 13:01