【发布时间】:2015-07-09 12:19:16
【问题描述】:
我想根据名字、姓氏和年份组合两个表,并创建一个新的二进制变量,指示表 1 中的行是否存在于第二个表中。
第一张表是一个赛季NBA球员一些属性的面板数据集:
firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic","Larry","Larry")
lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson","Bird","Bird")
year<-c("1991","1992","1993","1991","1992","1993","1992","1992")
season<-data.frame(firstname,lastname,year)
firstname lastname year
1 Michael Jordan 1991
2 Michael Jordan 1992
3 Michael Jordan 1993
4 Magic Johnson 1991
5 Magic Johnson 1992
6 Magic Johnson 1993
7 Larry Bird 1992
8 Larry Bird 1992
第二个data.frame是入选全明星赛的NBA球员的一些属性的面板数据集:
firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic")
lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson")
year<-c("1991","1992","1993","1991","1992","1993")
ALLSTARS<-data.frame(firstname,lastname,year)
firstname lastname year
1 Michael Jordan 1991
2 Michael Jordan 1992
3 Michael Jordan 1993
4 Magic Johnson 1991
5 Magic Johnson 1992
6 Magic Johnson 1993
我想要的结果如下:
firstname lastname year allstars
1 Michael Jordan 1991 1
2 Michael Jordan 1992 1
3 Michael Jordan 1993 1
4 Magic Johnson 1991 1
5 Magic Johnson 1992 1
6 Magic Johnson 1993 1
7 Larry Bird 1992 0
8 Larry Bird 1992 0
我尝试使用左连接。但不确定这是否有意义:
test<-join(season, ALLSTARS, by =c("lastname","firstname","year") , type = "left", match = "all")
【问题讨论】:
-
我会使用 dplyr 包中的
left_join或right_join,就像大卫的回答一样。但是为了修复你的代码:看起来你正在使用 plyr 包中的join()。你快到了,只需在你的命令前加上ALLSTARS$allstars <- 1。然后加入并将NA值转换为0。 -
@Sam Firke。那简直是非凡的! :) 谢谢。完美运行!
-
很高兴它有帮助 - 我已经把它写成下面的答案。
标签: r