代码之家  ›  专栏  ›  技术社区  ›  thiagoveloso

R-按组查找公共元素

  •  0
  • thiagoveloso  · 技术社区  · 6 年前

    library(data.table)
    dat <- fread("https://www.dropbox.com/s/kj66h9shv6zge91/mydat.csv?dl=1")
    

    看起来像这样:

                source_id experiment_id variable_id
       1: CESM2-WACCM-FV2    historical          pr
       2: CESM2-WACCM-FV2    historical          pr
       3: CESM2-WACCM-FV2    historical         tas
       4: CESM2-WACCM-FV2    historical         tas
       5:     FGOALS-f3-L    historical          pr
      ---                                          
    5657:      MRI-ESM2-0        ssp585          pr
    5658:     CESM2-WACCM        ssp585          pr
    5659:     CESM2-WACCM        ssp585         tas
    5660:     CESM2-WACCM        ssp585         tas
    5661:     CESM2-WACCM        ssp585      tasmax
    

    为每一个 variable_id ,我正在尝试查找中的元素列表 source_id 同时存在于 experiment_id (例如“历史”、“ssp126”、“ssp245”、“ssp370”、“ssp585”)。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ronak Shah    6 年前

    也许这会有帮助:

    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"
    

    为每一个 variable_id source_id experiment_id .


    如果你想找出共同点 为每一个 变量_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"