如何在R中创建一个函数,只有在达到阈值时才调用名称?

jw5wzhpr  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(159)

我有一个每天增加1个单位的变量(让我们称之为cumulative date)。您计算第1天到第10天的cumulative date。我想创建第二个变量,名为phase。阶段是“阶段1”、“阶段2”和“阶段3”。当cumulative date分别为2.6、6.3和8.3或更大时,达到这些阶段。我想在R中创建一个函数来实现这一点,但诀窍是我只想在满足条件时添加阶段。
这是我的代码:

create_phase <- function(cumulative_date) {
  phase <- case_when(
    cumulative_date >= 8.3 ~ "phase3",
    cumulative_date >= 6.3 ~ "phase2",
    cumulative_date >= 2.6 ~ "phase1"
  )
  return(phase)
}

cumulative_date <- 1:10
phase <- cbind(cumulative_date, create_phase(cumulative_date))

这是结果,它接近我所需要的:

但我真正需要的是这个

bxgwgixi

bxgwgixi1#

您可以按phase对数据进行分组,并将phase中除第一个条目以外的所有条目都转换为NA

df1 %>%
  mutate(phase = case_when(date >= 8.3 ~ "phase3",
                           date >= 6.3 ~ "phase2",
                           date >= 2.6 ~ "phase1")) %>%
  group_by(phase) %>%
  mutate(phase = c(phase[1], rep(NA, n()-1)))

虚拟数据:df1 <- tibble(date = 1:10)
结果:

# A tibble: 10 × 2
# Groups:   phase [4]
    date phase 
   <int> <chr> 
 1     1 NA    
 2     2 NA    
 3     3 phase1
 4     4 NA    
 5     5 NA    
 6     6 NA    
 7     7 phase2
 8     8 NA    
 9     9 phase3
10    10 NA

相关问题