【问题标题】:Assign a value to previous rows based on a condition in a group using R使用 R 根据组中的条件为前几行赋值
【发布时间】:2017-11-26 04:12:42
【问题描述】:

我有一个数据框,按 groupID 和日期排序

> d1 <- data.frame(groupID = c(1,1,1,1,1,3,3,3,3), 
             date = c(1,2,3,4,5,6,7,8,9),
             value = c(1,1,25,1,1,25,1,25,1))

 >d1

 groupID date value
   1    1     1
   1    2     1
   1    3    25
   1    4     1
   1    5     1
   3    6    25
   3    7     1
   3    8    25
   3    9     1

我想为每个组创建一个新列,其中包含最新 25 值的日期。

我打算看到以下输出

   groupID date value newvalue
       1    1     1     3
       1    2     1     3
       1    3    25     3
       1    4     1     NA  
       1    5     1     NA
       3    6    25     6
       3    7     1     8
       3    8    25     8
       3    9     1     NA 

我尝试了Assign value to group based on condition in column 和 if-else,但我的尝试都没有成功。

【问题讨论】:

    标签: r dataframe data-manipulation


    【解决方案1】:

    您可以使用 dplyr/tidyr 来执行此操作

    library(dplyr)
    library(tidyr)
    
    df<- data.frame(groupID = c(1,1,1,1,1,3,3,3,3),
                date = c(1:9),
                value = c(1,1,25,1,1,25,1,25,1))
    
    df <- df %>%
          group_by(groupID) %>%
          mutate(newvalue = ifelse(value == 25,date,NA)) %>%
          fill(newvalue, .direction = "up")
    

    【讨论】:

    • 效果很好。谢谢!
    猜你喜欢
    • 2023-01-26
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2022-06-21
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多