【发布时间】:2023-03-30 13:52:01
【问题描述】:
我正在尝试根据另一组列的值创建一个新列category。但是,我想动态选择要作为条件的列,而不是对列名进行硬编码。如果可能的话,我想留在 tidyverse。
这是我的最小可重现示例:
library(dplyr)
df <- tibble(user = c("A", "B", "C", "D", "E"),
jan = c(200, 500, 0, 20, 0),
feb = c(50, 10, 0, 0, 50),
mar = c(10, 100, 20, 0, 0),
apr = c(500, 10, 0, 20, 0))
category 列应包含值“稳定”,如果该行在过去 3 个月的每个月中都有非零值。这段代码可以满足我的要求:
df %>%
mutate(category = if_else(feb != 0 & mar != 0 & apr != 0, "stable", NA_character_))
但是,如果我想每月运行此代码(在添加新月份的数据后),我将不断更新它以引用最近 3 个月的列名。
有没有办法动态地做到这一点?我尝试将列位置与last_col(offset = 2:0) 一起使用,但没有成功。任何帮助将不胜感激。
【问题讨论】:
-
在
dplyr中,您可能需要执行以下操作:name_vec <- tail(names(df),3)df %>% mutate(category = if_else(!!sym(name_vec[1])!= 0 & !!sym(name_vec[2]) != 0 & !!sym(name_vec[3]) != 0, "stable", NA_character_))
标签: r