Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r中2个相关数据帧的子集和合并_R_Merge_Dataframe_Subset - Fatal编程技术网

r中2个相关数据帧的子集和合并

r中2个相关数据帧的子集和合并,r,merge,dataframe,subset,R,Merge,Dataframe,Subset,我已经搜索了档案,但在这个问题上没有任何结果,我涉及到两个相关数据帧的子集,一个数据帧是一个键,另一个是一个年度列表,我想使用该键创建一个子集和一个索引。我尝试使用子集公式,但我的代码不符合我的标准。以下是数据: players <- c('Albert Belle','Reggie Jackson', 'Reggie Jackson') contract_start_season <- c(1999,1977,1982) contract_end_season <- c(20

我已经搜索了档案,但在这个问题上没有任何结果,我涉及到两个相关数据帧的子集,一个数据帧是一个键,另一个是一个年度列表,我想使用该键创建一个子集和一个索引。我尝试使用子集公式,但我的代码不符合我的标准。以下是数据:

players <- c('Albert Belle','Reggie Jackson', 'Reggie Jackson')
contract_start_season <- c(1999,1977,1982)
contract_end_season <- c(2003, 1981, 1985)
key <- data.frame (player = players, contract_start_season, contract_end_season)
player_data <- data.frame( season = c(seq(1975,1985),seq(1997,2003)), player = c(rep('Reggie Jackson',times=11),rep('Albert Belle', times=7)))

players您是否正试图按照以下思路做一些事情

library(data.table)

key <- data.table(key)
player_data <- data.table(player_data)

#Adding another column called season to help in the merge later
key[,season := contract_start_season]

# Index on which to merge
setkeyv(key, c("player","season"))
setkeyv(player_data, c("player","season"))

#the roll = Inf makes it like a closest merge, instead of an exact merge
key[player_data, roll = Inf]

但我想排除那些不重要的年份,比如雷吉·杰克逊的年份是1977年到1981年,然后是1982年到1985年,阿尔伯特·贝尔的年份是1999年到2003年。我对合并没问题,我只是希望它能够根据键中设置的标准进行子集缩小。实际上,只需去掉NA就可以了,我想!让我试试itTry
key[player\u data,roll=Inf][!is.na(合同开始季节)]
library(data.table)

key <- data.table(key)
player_data <- data.table(player_data)

#Adding another column called season to help in the merge later
key[,season := contract_start_season]

# Index on which to merge
setkeyv(key, c("player","season"))
setkeyv(player_data, c("player","season"))

#the roll = Inf makes it like a closest merge, instead of an exact merge
key[player_data, roll = Inf]
> key[player_data, roll = Inf]
            player season contract_start_season contract_end_season
 1:   Albert Belle   1997                    NA                  NA
 2:   Albert Belle   1998                    NA                  NA
 3:   Albert Belle   1999                  1999                2003
 4:   Albert Belle   2000                  1999                2003
 5:   Albert Belle   2001                  1999                2003
 6:   Albert Belle   2002                  1999                2003
 7:   Albert Belle   2003                  1999                2003
 8: Reggie Jackson   1975                    NA                  NA
 9: Reggie Jackson   1976                    NA                  NA
10: Reggie Jackson   1977                  1977                1981
11: Reggie Jackson   1978                  1977                1981
12: Reggie Jackson   1979                  1977                1981
13: Reggie Jackson   1980                  1977                1981
14: Reggie Jackson   1981                  1977                1981
15: Reggie Jackson   1982                  1982                1985
16: Reggie Jackson   1983                  1982                1985
17: Reggie Jackson   1984                  1982                1985
18: Reggie Jackson   1985                  1982                1985