r - `~` 函数中 `case_when` 之后的条件项

标签 r dplyr tidyverse case-when

我想在 ~ 后面放一个条件项在 case_when功能。
我的例子:
df:

df <- structure(list(x = c("a", "a", "a", "b", "b", "b", "c", "c", 
"c", "a", "a", "a"), y = 1:12), class = "data.frame", row.names = c(NA, 
-12L))
不工作的代码:
library(dplyr)
df %>% 
  group_by(x) %>% 
  mutate(y = case_when(x=="b" ~ cumsum(y),
                       TRUE ~ y)) %>% 
  mutate(y = case_when(x=="a" ~ "what I want: last value of group "b" in column y", 
                       TRUE ~ y))
用一句话来说:
  • group_by x
  • 计算 cumsumb在栏目y
  • 取该组 (=b) 的最后一个值 (=15) 和
  • 将此值 (=15) 放入列 y组在哪里a

  • 所需的输出:
       x         y
       <chr> <dbl>
     1 a        15
     2 a        15
     3 a        15
     4 b         4
     5 b         9
     6 b        15
     7 c         7
     8 c         8
     9 c         9
    10 a        15
    11 a        15
    12 a        15
    
    非常感谢!!!

    最佳答案

    在这种情况下,group_by()不是必需的(尽管它有助于提高可读性等):

    df %>%
     mutate(y = case_when(x == "b" ~ cumsum(y * (x == "b")),
                          x == "a" ~ max(cumsum(y[x == "b"])),
                          TRUE ~ y))
    
       x  y
    1  a 15
    2  a 15
    3  a 15
    4  b  4
    5  b  9
    6  b 15
    7  c  7
    8  c  8
    9  c  9
    10 a 15
    11 a 15
    12 a 15
    

    关于r - `~` 函数中 `case_when` 之后的条件项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67208649/

    相关文章:

    r - 添加带有小刻度的第二个轴(顶部和右侧)

    r - 如何将 lapply 的结果组合到 data.frame?

    r - 将分区文件夹列转换为变量

    r - 根据经纬度获取 K 个最近邻

    r - 如何在filter_at中使用.data?

    r - 组合数据框中包含 NA 的行以形成完整的行

    r - 查找某行中最小元素的列号

    r - 如何按两个条件进行分组并计算所有行是否满足另一个条件

    r - R 中的 3D 绘图,更好的可见表面

    r - 将两个数据框按间隔连接起来会出现错误吗?