全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
7585 7
2015-04-22
现在有两个data.frame 每个两列,完成的功能是在第2个data.frame第一列找到在第1个data.fram第一列出现的元素,对应地取出第2个data.fram第2列的值,然后合并到第2个data.frame第3列。不要用循环,请问R里有没相关函数。R新手虚心求教!!!

二维码

扫码加我 拉你入群

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

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

全部回复
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的数据进行匹配到第三列了

######## 不用谢我,请叫我雷锋,呵呵呵呵呵!
二维码

扫码加我 拉你入群

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

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

2015-4-22 10:23:35
可以把两个data.frame 每个两列 合并。到一个data.frame。 然后,比较 。如果相同就取值。这样可以不。
二维码

扫码加我 拉你入群

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

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

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
二维码

扫码加我 拉你入群

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

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

2015-4-22 17:06:47
shenyu2070 发表于 2015-4-22 10:21
我是这么猜测你的描述的哈:两个数据库: A,B
其中A的两列分别是  x1、x2
B的两列分别是:  x1、x3,
谢谢!雷锋!!
二维码

扫码加我 拉你入群

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

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

2015-4-22 17:07:25
katymeala 发表于 2015-4-22 14:21
you need the function merge()
here is an example:
谢谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群