在R中创建包含月份计数器的列

在R中创建包含月份计数器的列,r,dplyr,mutate,R,Dplyr,Mutate,我有以下R数据帧: ID Completed Days 001 Yes 65 002 No NA 003 Yes 120 004 Yes 22 我想创建以下数据集: ID Month Success DaysAtSuccess 001 1 No

我有以下R数据帧:

ID     Completed       Days
001    Yes             65
002    No              NA
003    Yes             120
004    Yes             22
我想创建以下数据集:

ID     Month           Success          DaysAtSuccess
001    1               No                 NA
002    1               No                 NA
003    1               No                 NA 
004    1               Yes                22
001    2               No                 NA
002    2               No                 NA
003    2               No                 NA 
004    2               Yes                22
001    3               Yes                65
002    3               No                 NA
003    3               No                 NA 
004    3               Yes                22
001    4               Yes                65
002    4               No                 NA
003    4               Yes               120
004    4               Yes                22
   ID  Completed Days Month
  001        Yes   65     3
  002         No   NA    NA
  003        Yes  120     4
  004        Yes   22     1
想法是让“月”列按30天枚举。 例如,月=1将包括第0-30天,月=2将包括第31-60天,等等。。。 如果每个月的值等于或大于较低的值,则DaysAtSuccess将等于Day列中的值。 我正在使用mutate(dplyr)和ifelse函数创建数据集,但到目前为止运气不佳。如有任何见解,将不胜感激

编辑:

使用以下代码,我能够生成“月”列:

df$Month使用您的数据

tibble::tribble(
  ~ID, ~Completed, ~Days,
  "001", "Yes",      65,
  "002", "No",       NA,
  "003", "Yes",      120,
  "004", "Yes",      22
) -> your_data
我愿意

library(tidyverse)

your_data %>%
  pmap(\(ID, Completed, Days) {
    map(seq(30, max(.$Days, na.rm = T), 30),
        ~ tibble(ID = ID,
                 Month = .x / 30,
                 Success = ifelse(!is.na(Days) & Days <= .x, "Yes", "No"),
                 DaysAtSuccess = ifelse(Days <= .x, Days, NA)))
  }) %>%
  bind_rows() %>%
  arrange(Month)
库(tidyverse)
您的_数据%>%
pmap(\(ID,已完成,天数){
地图(序号30,最大值(.$Days,na.rm=T),30),
~tibble(ID=ID,
月份=.x/30,
成功=ifelse(!is.na(天)&天%
安排(月)
返回

# A tibble: 16 x 4
   ID    Month Success DaysAtSuccess
   <chr> <dbl> <chr>           <dbl>
 1 001       1 No                 NA
 2 002       1 No                 NA
 3 003       1 No                 NA
 4 004       1 Yes                22
 5 001       2 No                 NA
 6 002       2 No                 NA
 7 003       2 No                 NA
 8 004       2 Yes                22
 9 001       3 Yes                65
10 002       3 No                 NA
11 003       3 No                 NA
12 004       3 Yes                22
13 001       4 Yes                65
14 002       4 No                 NA
15 003       4 Yes               120
16 004       4 Yes                22
#一个tible:16 x 4
ID月成功日成功
10011无NA
2 002 1无NA
30031不适用
4 004 1是22
50012无NA
6 002 2无NA
7 003 2不适用
8 004 2是22
9 001 3是65
10 002 3不适用
11 003 3不适用
12 004 3是22
13 001 4是65
14 002 4无NA
15 003 4是120
16 004 4是22

什么是
?它是
NA
?我不知道我是否得到了你想要的,但是可能
df$DaysAtSuccess@PedroAlencar似乎不起作用,我相信代码不会起作用,因为df$month列不在原始数据框中。嗨@statsguyz,你能用
df$month@PedroAle在原始数据框中创建month列吗ncar是的,这产生了一个“月”列。我将把它添加到原始问题中。