【问题标题】:Replace Value with another value in same column by Group按组将值替换为同一列中的另一个值
【发布时间】:2018-10-31 21:26:30
【问题描述】:

我在下面有一个数据集:

       Date    Group  Value
 2015-02-15        A     10
 2015-02-23        A    422
 2015-03-02        A     89
 2015-02-15        B     32
 2015-02-23        B     11
 2015-02-15        C     30
 2015-03-02        C      2

我想制定一个规则,对于每个组,如果出现2015-02-15 的值,则按组将该值替换为日期2015-03-02 的值。

预期输出:

       Date    Group  Value
 2015-02-15        A     89    <----replaced
 2015-02-23        A    422
 2015-03-02        A     89
 2015-02-15        B     32    <----not replaced since 2015-03-02 doesn't exist
 2015-02-23        B     11
 2015-02-15        C      2    <----replaced
 2015-03-02        C      2  

【问题讨论】:

    标签: r if-statement dplyr


    【解决方案1】:

    这是使用 tidyverse 的解决方案。这个想法是创建另一个替换值的数据框。我通过仅过滤到 3 月 2 日来做到这一点(因为这些是您要使用的值)。然后我将它加入到原始数据框中。从那里,您可以使用case_when 表示,如果日期是 2 月 15 日并且有可用的新值,则使用该值,否则使用原始值。

    library(tidyverse)
    
    df <- data_frame(
      Date = c("2015-02-15", "2015-02-32", "2015-03-02", "2015-02-15",
        "2015-02-23", "2015-02-15", "2015-03-02"),
      Group = c("A", "A", "A", "B", "B", "C", "C"),
      Value = c(10, 422, 89, 32, 11, 30, 2)
    )
    
    df
    #> # A tibble: 7 x 3
    #>   Date       Group Value
    #>   <chr>      <chr> <dbl>
    #> 1 2015-02-15 A        10
    #> 2 2015-02-32 A       422
    #> 3 2015-03-02 A        89
    #> 4 2015-02-15 B        32
    #> 5 2015-02-23 B        11
    #> 6 2015-02-15 C        30
    #> 7 2015-03-02 C         2
    
    replace_values <- df %>%
      filter(Date == "2015-03-02") %>%
      select(Group, new_value = Value)
    
    replace_values
    #> # A tibble: 2 x 2
    #>   Group new_value
    #>   <chr>     <dbl>
    #> 1 A            89
    #> 2 C             2
    
    df %>%
      group_by(Group) %>%
      left_join(replace_values, by = "Group") %>%
      mutate(
        Value = case_when(
          Date == "2015-02-15" & !is.na(new_value) ~ new_value,
          TRUE ~ Value
        )
      ) %>%
      select(-new_value)
    #> # A tibble: 7 x 3
    #> # Groups:   Group [3]
    #>   Date       Group Value
    #>   <chr>      <chr> <dbl>
    #> 1 2015-02-15 A        89
    #> 2 2015-02-32 A       422
    #> 3 2015-03-02 A        89
    #> 4 2015-02-15 B        32
    #> 5 2015-02-23 B        11
    #> 6 2015-02-15 C         2
    #> 7 2015-03-02 C         2
    

    reprex package (v0.2.1) 于 2018 年 10 月 31 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2022-01-13
      相关资源
      最近更新 更多