【问题标题】:Summarize variables beside总结变量旁边
【发布时间】:2020-04-02 17:36:41
【问题描述】:

我正在为我的问题寻找解决方案。我只能通过手动重新排列来解决它。

Example code:

  library(dplyr)

    set.seed(1)
    Data <- data.frame(
      W = sample(1:10),
      X = sample(1:10),
      Y = sample(c("yes", "no"), 10, replace = TRUE),
      Z = sample(c("cat", "dog"), 10, replace = TRUE)
    )        
    #
    summarized <- Data %>% group_by(Z) %>% summarise_if(is.numeric,funs(mean,median),na.rm=T)

print(Data)

我希望输出如下所示,每个函数应用于第一个列,然后每个函数应用于第二个列,依此类推。我的代码反之亦然。

当然,我可以重新排列列,但这不是数据科学的意义所在。我有数百个 cols 并且想要应用多个函数。

这就是我想要的:

summarized <- summarized[,c(1,2,4,3,5)] #best solution yet

有什么我遗漏的论点吗?我敢打赌,有一个简单的解决方案或其他功能可以完成这项工作。 伙计们,提前谢谢!

【问题讨论】:

    标签: r dplyr summarize


    【解决方案1】:

    一种选择是使用足够的select_helpers 进行后处理

    library(dplyr)
    summarized %>% 
        select(Z, starts_with('W'), everything())
    # A tibble: 2 x 5
    #  Z     W_mean W_median X_mean X_median
    #  <fct>  <dbl>    <dbl>  <dbl>    <dbl>
    #1 cat     5.25      5.5   3.75      3.5
    #2 dog     5.67      5.5   6.67      7  
    

    如果有100个列,一种方法是获取列名的子字符串,并排序

    library(stringr)
    summarized %>% 
             select(Z, order(str_remove(names(.), "_.*")))
    # A tibble: 2 x 5
    #  Z     W_mean W_median X_mean X_median
    #  <fct>  <dbl>    <dbl>  <dbl>    <dbl>
    #1 cat     5.25      5.5   3.75      3.5
    #2 dog     5.67      5.5   6.67      7  
    

    【讨论】:

    • 感谢您的快速回复。您的解决方案可能在这里有效,但不是数百个 cols 的工具。还有什么办法?
    • @Daniel Sjoberg 相同
    • 这很好用!如果您不需要保留输入数据的原始顺序(就像我的情况一样),那么这项工作做得很好。谢谢阿伦!
    【解决方案2】:

    您可以使用starts_with() 来选择列,而不是按数字。

    library(dplyr)
    set.seed(1)
    Data <- data.frame(
      W = sample(1:10),
      X = sample(1:10),
      Y = sample(c("yes", "no"), 10, replace = TRUE),
      Z = sample(c("cat", "dog"), 10, replace = TRUE)
    )        
    
    summarized <- 
      Data %>% 
      group_by(Z) %>% 
      summarise_if(is.numeric,funs(mean,median),na.rm=T) %>%
      select(Z, starts_with("W_"), starts_with("X_"))
    
    summarized
    #> # A tibble: 2 x 5
    #>   Z     W_mean W_median X_mean X_median
    #>   <fct>  <dbl>    <dbl>  <dbl>    <dbl>
    #> 1 cat     5.25      5.5   3.75      3.5
    #> 2 dog     5.67      5.5   6.67      7
    

    reprex package (v0.3.0) 于 2019 年 12 月 9 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2022-11-05
      相关资源
      最近更新 更多