【问题标题】:R Studio: How to perform calculation for numbers from different rows indexes (tidyverse)R Studio:如何对来自不同行索引的数字执行计算(tidyverse)
【发布时间】:2021-05-03 18:00:12
【问题描述】:

我有一个如下所示的数据框:

+-------+-------+
| value | index |
+-------+-------+
| 10    | 0.05  |
+-------+-------+
| 20    | 0.1   |
+-------+-------+
| 30    | 0.2   |
+-------+-------+
| 40    | 0.3   |
+-------+-------+
| 50    | 0.4   |
+-------+-------+
| 60    | 0.5   |
+-------+-------+

我想创建一个新列,其中 每一行 ivalue (i-1) 乘以 index i .计算方法见下表:

+-------+-------+-----------------+
| value | index | value_multipled |
+-------+-------+-----------------+
| 10    | 0.05  | = 0 * 0.05 = 0  |
+-------+-------+-----------------+
| 20    | 0.1   | = 10 * 0.1 = 1  |
+-------+-------+-----------------+
| 30    | 0.2   | = 20 * 0.2 = 4  |
+-------+-------+-----------------+
| 40    | 0.3   | = 30 * 0.3 = 9  |
+-------+-------+-----------------+
| 50    | 0.4   | = 40 * 0.4 = 16 |
+-------+-------+-----------------+
| 60    | 0.5   | = 50 * 0.5 = 25 |
+-------+-------+-----------------+

决赛桌如下所示:

+-------+-------+-----------------+
| value | index | value_multipled |
+-------+-------+-----------------+
| 10    | 0.05  | 0               |
+-------+-------+-----------------+
| 20    | 0.1   | 1               |
+-------+-------+-----------------+
| 30    | 0.2   | 4               |
+-------+-------+-----------------+
| 40    | 0.3   | 9               |
+-------+-------+-----------------+
| 50    | 0.4   | 16              |
+-------+-------+-----------------+
| 60    | 0.5   | 25              |
+-------+-------+-----------------+

非常感谢您的帮助!

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    我们可以使用lag

    library(dplyr)
    df1 <- df1 %>%
       mutate(value_multiplied = lag(value, default = 0) * index)
    

    -输出

    df1
    #  value index value_multiplied
    #1    10  0.05                0
    #2    20  0.10                1
    #3    30  0.20                4
    #4    40  0.30                9
    #5    50  0.40               16
    #6    60  0.50               25
    

    数据

    df1 <- data.frame(value = c(10, 20, 30, 40, 50, 60), 
          index = c(0.05, 0.1, 0.2, 0.3, 0.4, 0.5))
    

    【讨论】:

      【解决方案2】:

      使用head 的基本 R 选项

      transform(
        df,
        value_multipled = index * c(0, head(value, -1))
      )
      

      给予

        value index value_multipled
      1    10  0.05               0
      2    20  0.10               1
      3    30  0.20               4
      4    40  0.30               9
      5    50  0.40              16
      6    60  0.50              25
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-17
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 2020-07-04
        • 2016-03-30
        • 1970-01-01
        • 2019-11-07
        相关资源
        最近更新 更多