在R中创建包含月份计数器的列
我有以下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
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是的,这产生了一个“月”列。我将把它添加到原始问题中。