R условие новой переменной для двух переменных - PullRequest
2 голосов
/ 06 августа 2020

Итак, я столкнулся со следующей проблемой: у меня есть фрейм данных следующей формы:

ID   Date        Var1
1    20200101    0
1    20200102    0
1    20200103    0
1    20200104    0
1    20200104    0
2    20200101    0
2    20200102    0
2    20200103    4
2    20200104    7
2    20200105    13

, и я хотел бы определить дополнительную переменную, принимающую 1, если Var1> 0 для первого время в январе месяце (20200101:20200131) и 0 в противном случае в отношении идентификаторов. Фактическая база данных распространяется на 6 месяцев, а Var1 - это промежуточная сумма, поэтому, если один раз> 0, она больше никогда не уменьшится. Итоговый кадр должен выглядеть примерно так:

ID   Date        Var1   new_var
1    20200101    0       0
1    20200102    0       0
1    20200103    0       0
1    20200104    0       0
1    20200104    0       0
2    20200101    0       1
2    20200102    0       1
2    20200103    4       1
2    20200104    7       1
2    20200105    13      1

Спасибо за все ваши ответы!

1 Ответ

0 голосов
/ 06 августа 2020

Вот решение, использующее ave и substr для получения только месяца / года каждой даты.

z <- substr(df1$Date, 1, 6)
jan <- ave(df1$Date, df1$ID, FUN = function(x) substr(x, 5, 6) == "01")
zero <- ave(df1$Var1, df1$ID, z, FUN = function(x) any(x > 0))
df1$new_var <- +(as.logical(jan) & zero)

df1
#   ID     Date Var1 new_var
#1   1 20200101    0       0
#2   1 20200102    0       0
#3   1 20200103    0       0
#4   1 20200104    0       0
#5   1 20200104    0       0
#6   2 20200101    0       1
#7   2 20200102    0       1
#8   2 20200103    4       1
#9   2 20200104    7       1
#10  2 20200105   13       1

Data

df1 <- read.table(text = "
ID   Date        Var1
1    20200101    0
1    20200102    0
1    20200103    0
1    20200104    0
1    20200104    0
2    20200101    0
2    20200102    0
2    20200103    4
2    20200104    7
2    20200105    13
", header = TRUE)
...