R-按组查找公共元素

R-按组查找公共元素,r,data.table,R,Data.table,我正在使用以下数据集 library(data.table) dat <- fread("https://www.dropbox.com/s/kj66h9shv6zge91/mydat.csv?dl=1") 对于每个变量id,我试图找到源id中同时存在于实验id所有元素中的元素列表(例如,“历史”、“ssp126”、“ssp245”、“ssp370”、“ssp585”) 有什么办法去那里吗?看起来是一个简单的问题,但我在上找不到合适的答案,因此无法使用字符而不是数字值

我正在使用以下数据集

library(data.table)
dat <- fread("https://www.dropbox.com/s/kj66h9shv6zge91/mydat.csv?dl=1")
对于每个
变量id
,我试图找到
源id
中同时存在于
实验id
所有元素中的元素列表(例如,“历史”、“ssp126”、“ssp245”、“ssp370”、“ssp585”)

有什么办法去那里吗?看起来是一个简单的问题,但我在上找不到合适的答案,因此无法使用字符而不是数字值。

也许这会有帮助:

by(dat, dat$variable_id, function(x) 
        Reduce(intersect, split(x$source_id, x$experiment_id)))

#dat$variable_id: pr
# [1] "BCC-CSM2-MR" "MRI-ESM2-0"  "CESM2-WACCM" "INM-CM5-0"  "INM-CM4-8"    
# [6] "MPI-ESM1-2-HR" "CMCC-CM2-SR5"  "NorESM2-MM"  "EC-Earth3"  "EC-Earth3-Veg"
#[11] "GFDL-ESM4"    
#-------------------------------------------------------------------------- 
#dat$variable_id: tas
# [1] "BCC-CSM2-MR"   "MRI-ESM2-0"    "CESM2-WACCM"   "AWI-CM-1-1-MR" "INM-CM4-8"
# [6] "INM-CM5-0"     "MPI-ESM1-2-HR" "CMCC-CM2-SR5"  "NorESM2-MM"    "EC-Earth3"
#[11] "EC-Earth3-Veg" "GFDL-ESM4"    
#-------------------------------------------------------------------------- 
#dat$variable_id: tasmax
# [1] "BCC-CSM2-MR"   "MRI-ESM2-0"    "AWI-CM-1-1-MR" "INM-CM4-8"     "INM-CM5-0"
# [6] "MPI-ESM1-2-HR" "NorESM2-MM"    "EC-Earth3"     "EC-Earth3-Veg" "GFDL-ESM4"
#-------------------------------------------------------------------------- 
#dat$variable_id: tasmin
# [1] "BCC-CSM2-MR"   "MRI-ESM2-0"    "AWI-CM-1-1-MR" "INM-CM4-8"     "INM-CM5-0"
# [6] "MPI-ESM1-2-HR" "NorESM2-MM"    "EC-Earth3"     "EC-Earth3-Veg" "GFDL-ESM4"
对于每个
变量_id
这将返回所有
实验_id
中存在的公共
源_id


如果您想为每个
变量\u id
和每个
实验\u id

Reduce(intersect, split(dat$source_id, list(dat$variable_id, dat$experiment_id)))

#[1] "BCC-CSM2-MR"   "MRI-ESM2-0"    "INM-CM5-0"     "INM-CM4-8"    
#[5] "MPI-ESM1-2-HR" "NorESM2-MM"    "EC-Earth3"     "EC-Earth3-Veg"
#[9] "GFDL-ESM4"    

太棒了,这正是我们想要的!
Reduce(intersect, split(dat$source_id, list(dat$variable_id, dat$experiment_id)))

#[1] "BCC-CSM2-MR"   "MRI-ESM2-0"    "INM-CM5-0"     "INM-CM4-8"    
#[5] "MPI-ESM1-2-HR" "NorESM2-MM"    "EC-Earth3"     "EC-Earth3-Veg"
#[9] "GFDL-ESM4"