【问题标题】:Change the values of rows conditionally in R在 R 中有条件地更改行的值
【发布时间】:2022-11-25 10:14:24
【问题描述】:

我的数据如下所示:

company_name <- c("A","A","A","A","B","B","B")
year <- c(1985, 1986, 1987, 1988, 1985, 1986, 1987)
value <- c(0, 1, 0, 0, 1, 0, 0)

df <- data.frame(company_name, year, value)

如果值为1,我想将这一行值(值=1)与下一行(值=0)切换。 (group_by 应该用于 company_name)我的输出必须是这样的:

value <- c(0, 0, 1, 0, 0, 1, 0)

new_df <- data.frame(company_name, year, value)

【问题讨论】:

    标签: r dplyr tidyverse data-manipulation


    【解决方案1】:

    这是一种可能的解决方案:

    library(dplyr)
    
    company_name <- c("A","A","A","A","B","B","B")
    year <- c(1985, 1986, 1987, 1988, 1985, 1986, 1987)
    value <- c(0, 1, 0, 0, 1, 0, 0)
    
    df <- data.frame(company_name, year, value)
    
    answer <- df %>%
      group_by(company_name) %>%
      mutate(value = ifelse(lag(value, default = 0) == 1, lag(value), 0))
    
    value <- c(0, 0, 1, 0, 0, 1, 0)
    new_df <- data.frame(company_name, year, value)
    
    all_equal(answer, new_df)
    #> [1] TRUE
    

    reprex package (v2.0.1) 创建于 2022-11-25

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多