【问题标题】:Divide first row by second row in R在R中将第一行除以第二行
【发布时间】:2020-05-27 10:33:22
【问题描述】:

这是一个简单的,但我猜它很棘手(至少在 tidyverse 中),因为在此之前我有多个管道。

我想要创建第三行,它将第一行中的所有数值除以第二行(以百分比表示)并为非数值提供 NA/留空。

structure(list(date = structure(c(1590105600, 1590537600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), A = c(106L, 140L), B = c(212L, 
320L), C = c(31L, 26L), D = c(108L, 166L), E = c(93L, 
152L), F = c(550L, 804L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -2L))

【问题讨论】:

    标签: r tidyverse tidyr


    【解决方案1】:

    使用好旧的[

    df[3, -1] <- df[1, -1] / df[2, -1]
    df
    #         date           A        B         C           D           E           F
    # 1 2020-05-22 106.0000000 212.0000 31.000000 108.0000000  93.0000000 550.0000000
    # 2 2020-05-27 140.0000000 320.0000 26.000000 166.0000000 152.0000000 804.0000000
    # 3       <NA>   0.7571429   0.6625  1.192308   0.6506024   0.6118421   0.6840796
    

    使用dplyr::add_rows()

    df %>% 
      add_row(.[1, -1] / .[2, -1])
    
      date                      A       B     C       D       E       F
      <dttm>                <dbl>   <dbl> <dbl>   <dbl>   <dbl>   <dbl>
    1 2020-05-22 00:00:00 106     212     31    108      93     550    
    2 2020-05-27 00:00:00 140     320     26    166     152     804    
    3 NA                    0.757   0.662  1.19   0.651   0.612   0.684 
    

    【讨论】:

    • 是的,我知道这一点,但在这一步之前我有很多管道,我想继续使用管道,因为我接下来会绘制它。因此更喜欢整洁的做事方式。 (也尽量避免硬编码)
    • @VaibhavSingh 保存中间对象没有坏处。
    • 我明白,但我相信一定有比这更好的方法。不过谢谢你,这肯定是我的 B 计划 :)
    • 谢谢,“免费解决方案”?
    • @VaibhavSingh 它没有 &lt;- 运算符。
    【解决方案2】:

    如果您正在寻找tidyverse 解决方案,您可以尝试:

    library(dplyr)
    
    df %>%
      bind_rows(summarise_if(., is.numeric, ~ .[1] / .[2]))
    

    输出:

    # A tibble: 3 x 7
      date                      A       B     C       D       E       F
      <dttm>                <dbl>   <dbl> <dbl>   <dbl>   <dbl>   <dbl>
    1 2020-05-22 00:00:00 106     212     31    108      93     550    
    2 2020-05-27 00:00:00 140     320     26    166     152     804    
    3 NA                    0.757   0.662  1.19   0.651   0.612   0.684
    

    【讨论】:

      猜你喜欢
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多