【问题标题】:Function for getting position of values获取值位置的函数
【发布时间】:2021-05-30 22:23:40
【问题描述】:

从这些数据中,我想要一个新列(“来自”),其中包含每行累积值的第一个值。它实际上应该是列“cum”+ 1 中的最后一个值。你将如何使用函数来执行此操作?想象有很多行。

     a <- c(5,5,4,3)
cum <- cumsum(a)
df <- data.frame(a,cum)
df
  a cum 
  5   5  
  5  10  
  4  14 
  3  17  

df$from <- c(1,6,11,15)
 df
  a cum from
  5   5    1
  5  10    6
  4  14   11
  3  17   15

【问题讨论】:

标签: r


【解决方案1】:

一种可能的解决方案是使用lag() 然后head() 删除创建的向量的最后一个元素

df$from <- head(c(1, lag(df$cum + 1)), -1)

df
#   a cum from
# 1 5   5    1
# 2 5  10    6
# 3 4  14   11
# 4 3  17   15

【讨论】:

    【解决方案2】:
    library(tidyverse) 
    a <- c(5,5,4,3)
    cum <- cumsum(a)
    df <- data.frame(a,cum)
    
    df %>% 
      mutate(from = lag(cum, default = 0) + 1)
    #>   a cum from
    #> 1 5   5    1
    #> 2 5  10    6
    #> 3 4  14   11
    #> 4 3  17   15
    

    reprex package (v1.0.0) 于 2021-03-01 创建

    【讨论】:

      【解决方案3】:

      基本 R 选项

      transform(
        df,
        from = c(1, head(cum, -1) + 1)
      )
      

      给予

        a cum from
      1 5   5    1
      2 5  10    6
      3 4  14   11
      4 3  17   15
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        • 2018-09-15
        • 2014-08-05
        • 2018-02-14
        • 1970-01-01
        • 2022-07-05
        相关资源
        最近更新 更多