【问题标题】:Is there a specific function in R to merge 2 vectors [duplicate]R中是否有合并2个向量的特定函数[重复]
【发布时间】:2020-09-28 12:33:32
【问题描述】:

我有两个向量,一个包含变量列表,一个包含日期,例如

Variables_Pays <- c("PIB", "ConsommationPrivee","ConsommationPubliques",
                    "FBCF","ProductionIndustrielle","Inflation","InflationSousJacente",
                    "PrixProductionIndustrielle","CoutHoraireTravail")
Annee_Pays <- c("2000","2001")

我想将它们合并成一个向量,其中每个变量都由我的日期索引,即我想要的输出是

> Colonnes_Pays_Principaux
 [1] "PIB_2020"                        "PIB_2021"                        "ConsommationPrivee_2020"        
 [4] "ConsommationPrivee_2021"         "ConsommationPubliques_2020"      "ConsommationPubliques_2021"     
 [7] "FBCF_2020"                       "FBCF_2021"                       "ProductionIndustrielle_2020"    
[10] "ProductionIndustrielle_2021"     "Inflation_2020"                  "Inflation_2021"                 
[13] "InflationSousJacente_2020"       "InflationSousJacente_2021"       "PrixProductionIndustrielle_2020"
[16] "PrixProductionIndustrielle_2021" "CoutHoraireTravail_2020"         "CoutHoraireTravail_2021" 

有没有比我在下面尝试并成功的双 for 循环更简单/更易读的方法?

Colonnes_Pays_Principaux <- vector()
for (Variable in (1:length(Variables_Pays))){
  for (Annee in (1:length(Annee_Pays))){
     Colonnes_Pays_Principaux=
       append(Colonnes_Pays_Principaux,
              paste(Variables_Pays[Variable],Annee_Pays[Annee],sep="_")
              )
  }
}

【问题讨论】:

    标签: r vector merge readability


    【解决方案1】:

    expand.grid 将创建一个包含两个向量的所有组合的数据框。

    with(
      expand.grid(Variables_Pays, Annee_Pays),
      paste0(Var1, "_", Var2)
    )
    #>  [1] "PIB_2000"                        "ConsommationPrivee_2000"        
    #>  [3] "ConsommationPubliques_2000"      "FBCF_2000"                      
    #>  [5] "ProductionIndustrielle_2000"     "Inflation_2000"                 
    #>  [7] "InflationSousJacente_2000"       "PrixProductionIndustrielle_2000"
    #>  [9] "CoutHoraireTravail_2000"         "PIB_2001"                       
    #> [11] "ConsommationPrivee_2001"         "ConsommationPubliques_2001"     
    #> [13] "FBCF_2001"                       "ProductionIndustrielle_2001"    
    #> [15] "Inflation_2001"                  "InflationSousJacente_2001"      
    #> [17] "PrixProductionIndustrielle_2001" "CoutHoraireTravail_2001" 
    

    【讨论】:

      【解决方案2】:

      我们可以使用outer

      c(t(outer(Variables_Pays, Annee_Pays, paste, sep = '_')))
      
      # [1] "PIB_2000"                        "PIB_2001"                       
      # [3] "ConsommationPrivee_2000"         "ConsommationPrivee_2001"        
      # [5] "ConsommationPubliques_2000"      "ConsommationPubliques_2001"     
      # [7] "FBCF_2000"                       "FBCF_2001"                      
      # [9] "ProductionIndustrielle_2000"     "ProductionIndustrielle_2001"    
      #[11] "Inflation_2000"                  "Inflation_2001"                 
      #[13] "InflationSousJacente_2000"       "InflationSousJacente_2001"      
      #[15] "PrixProductionIndustrielle_2000" "PrixProductionIndustrielle_2001"
      #[17] "CoutHoraireTravail_2000"         "CoutHoraireTravail_2001" 
      

      【讨论】:

        【解决方案3】:

        这里没有必要超越基础知识!使用paste 粘贴字符串,使用rep 重复Annee_Pays och Variables_Pays 以获得所有组合:

        Variables_Pays <- c("PIB", "ConsommationPrivee","ConsommationPubliques",
                           "FBCF","ProductionIndustrielle","Inflation","InflationSousJacente",
                            "PrixProductionIndustrielle","CoutHoraireTravail")
        Annee_Pays <- c("2000","2001")
        
        # To get this is the same order as in your example:
        paste(rep(Variables_Pays, rep(2, length(Variables_Pays))), Annee_Pays, sep = "_")
        
        # Alternative order:
        paste(Variables_Pays, rep(Annee_Pays, rep(length(Variables_Pays), 2)), sep = "_")
        
        # Or, if order doesn't matter too much:
        paste(Variables_Pays, rep(Annee_Pays, length(Variables_Pays)), sep = "_")
        

        【讨论】:

        • 好吧订单,我希望它以另一个顺序,我的第一个向量中的每个值在下一个向量之前加倍,如我的示例所示(例如,两个第一个结果应该是 PIB_2000 和 PIB_2001)
        • @AnthonyMartin:我用一种获得正确顺序的方法更新了我的答案。不知道为什么我昨天反其道而行之:)
        • 接受,因为它是建议中最快的
        【解决方案4】:

        在基础 R 中:

        Variables_Pays <- c("PIB", "ConsommationPrivee","ConsommationPubliques",
                            "FBCF","ProductionIndustrielle","Inflation","InflationSousJacente",
                            "PrixProductionIndustrielle","CoutHoraireTravail")
        Annee_Pays <- c("2000","2001")
        cbind(paste(Variables_Pays, Annee_Pays,sep="_"),paste(Variables_Pays, rev(Annee_Pays),sep="_")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-04
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 2019-05-20
          • 2021-12-06
          相关资源
          最近更新 更多