【问题标题】:Loop over string characters in R循环遍历R中的字符串字符
【发布时间】:2020-11-24 00:47:08
【问题描述】:

我正在尝试遍历字符列表:

covariate_names <- c("Age_50.", "Age_30.49", "Age_18.29", "Income_High", "Income_Medium", "Income_Low",
                "DemographicSegment_Value.Seeker", "DemographicSegment_Established", "DemographicSegment_Planner", "DemographicSegment_Affluent",
                "DemographicSegment_Digital.Native","Gender_F..", "Gender_M..", "TransactionAmount",
                "TechTxns", "FashionTxns", "TravelTxns", "GamerTxns",
                "Recency", "Frequency", "Monetary", "Breadth", "Consistency", "is_donor", "donation_amt")
pairs <- function(df, covariate, group){
    pwc <- pairwise_t_test(data = df,
                           formula = as.formula(paste0(covariate,"~",group)),
                           paired = FALSE )
    pwc <- as.data.frame(pwc)
    pwc <- pwc %>% rename(GroupA = group1,
                     GroupB = group2,
                     N_grpA = n1, N_grpB = n2)
pwc <- pwc[,1:7]
pwc <- pwc %>%
    mutate_if(is.numeric, round, digits = 6)
    
    #print(pwc)
}

for (i in covariate_names){
    pwc_i <- pairs(df = df_test_TS, covariate = i, group = "w.contextual")
}

但是pairs 函数返回一个df,所以我不知道这是否可以使用循环。我只想为列表中的所有协变量运行pairs函数,并且能够调用pairs函数的每个单独迭代的输出。

【问题讨论】:

    标签: r loops for-loop


    【解决方案1】:

    您可以使用该功能:

    library(dplyr)
    library(purrr)
    
    pairs <- function(df, covariate, group){
      pwc <- pairwise_t_test(data = df,
                             formula = reformulate(group, covariate),
                             paired = FALSE )
      pwc <- as.data.frame(pwc)
      pwc %>% 
        rename(GroupA = group1,
               GroupB = group2,
               N_grpA = n1, N_grpB = n2) %>%
        select(1:7) %>%
        mutate(across(where(is.numeric), round, digits = 6))
        #For older dplyr
        #mutate_if(is.numeric, round, digits = 6)
      
    }
    

    然后使用map/lapply 获取列表作为输出:

    result <- map(covariate_names, ~pairs(df_test_TS, .x, "w.contextual"))
    

    如果您想将结果合并到一个数据框中,请使用map_df

    result <- map_df(covariate_names, ~pairs(df_test_TS, .x, "w.contextual"))
    

    【讨论】:

      【解决方案2】:

      您需要使用循环将结果存储在列表中。您可以尝试下一个代码:

      #Data
      covariate_names <- c("Age_50.", "Age_30.49", "Age_18.29", "Income_High", "Income_Medium", "Income_Low",
                           "DemographicSegment_Value.Seeker", "DemographicSegment_Established", "DemographicSegment_Planner", "DemographicSegment_Affluent",
                           "DemographicSegment_Digital.Native","Gender_F..", "Gender_M..", "TransactionAmount",
                           "TechTxns", "FashionTxns", "TravelTxns", "GamerTxns",
                           "Recency", "Frequency", "Monetary", "Breadth", "Consistency", "is_donor", "donation_amt")
      #Function
      pairs <- function(df, covariate, group){
        pwc <- pairwise_t_test(data = df,
                               formula = as.formula(paste0(covariate,"~",group)),
                               paired = FALSE )
        pwc <- as.data.frame(pwc)
        pwc <- pwc %>% rename(GroupA = group1,
                              GroupB = group2,
                              N_grpA = n1, N_grpB = n2)
        pwc <- pwc[,1:7]
        pwc <- pwc %>%
          mutate_if(is.numeric, round, digits = 6)
        
        #print(pwc)
      }
      

      这里的变化:

      #List to store results
      List <- list()
      #Loop
      for (i in 1:length(covariate_names)){
        List[[i]] <- pairs(df = df_test_TS, covariate = covariate_names[i], group = "w.contextual")
      }
      

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 2020-02-16
        • 1970-01-01
        • 2014-09-19
        相关资源
        最近更新 更多