【问题标题】:Dividing each row by the previous one in R将每一行除以R中的前一行
【发布时间】:2021-01-09 14:23:35
【问题描述】:

我有 R 数据框

   city hour value
0   NY  0   12
1   NY  12  24
2   LA  0   3
3   LA  12  9

对于每个城市,我希望将每一行除以前一行并将结果写入一个新的数据帧。所需的输出是:

city ratio
NY   2
LA   3

【问题讨论】:

标签: r divide


【解决方案1】:

您可以尝试aggregate,如下所示

aggregate(value ~city,df, function(x) x[-1]/x[1])

给了

  city value
1   LA     3
2   NY     2

数据

> dput(df)
structure(list(city = c("NY", "NY", "LA", "LA"), hour = c(0L, 
12L, 0L, 12L), value = c(12L, 24L, 3L, 9L)), class = "data.frame", row.names = c("0",
"1", "2", "3"))

【讨论】:

    【解决方案2】:

    您可以使用lag 获取先前的值,将每个value 除以每个city 的先前值并删除NA 行。

    library(dplyr)
    df %>%
      arrange(city, hour) %>%
      group_by(city) %>%
      summarise(value = value/lag(value)) %>%
      na.omit()
    
    #  city  value
    #  <chr> <dbl>
    #1 LA        3
    #2 NY        2
    

    data.table 中,我们可以通过shift 做到这一点:

    library(data.table)
    setDT(df)[order(city, hour), value := value/shift(value), city]
    na.omit(df)
    

    【讨论】:

      猜你喜欢
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2018-12-13
      相关资源
      最近更新 更多