R 根据条件指定值1或0
我有从10月到4月的月度报告,并已将所有数据进行了汇总。我按UniqueID和日期对数据进行排序 我想创建一个满足以下条件的虚拟变量: 一,。如果特定UniqueID的最后一次出现不是在最后一个月四月,那么我希望变量为=1,否则为0 Freq列统计UniqueID在整个堆叠月报数据集中显示的次数R 根据条件指定值1或0,r,if-statement,count,unique,R,If Statement,Count,Unique,我有从10月到4月的月度报告,并已将所有数据进行了汇总。我按UniqueID和日期对数据进行排序 我想创建一个满足以下条件的虚拟变量: 一,。如果特定UniqueID的最后一次出现不是在最后一个月四月,那么我希望变量为=1,否则为0 Freq列统计UniqueID在整个堆叠月报数据集中显示的次数 UniqueID Date Freq XX343_1 02/01/2019 3 XX343_1 03/01/2019 3 XX343_1 04/01/2019 3 SD22
UniqueID Date Freq
XX343_1 02/01/2019 3
XX343_1 03/01/2019 3
XX343_1 04/01/2019 3
SD229_1 11/01/2018 4
SD229_1 12/01/2018 4
SD229_1 01/01/2019 4
SD229_1 02/01/2019 4
WE321_1 10/01/2018 1
基本上,我需要以下输出:
UniqueID Date Freq Dummy
XX343_1 02/01/2019 3 0
XX343_1 03/01/2019 3 0
XX343_1 04/01/2019 3 0
SD229_1 11/01/2018 4 0
SD229_1 12/01/2018 4 0
SD229_1 01/01/2019 4 0
SD229_1 02/01/2019 4 1
WE321_1 10/01/2018 1 1
以下代码是我尝试的代码:
data$Dummy=ifelse(data$Date=="2018-10-01" & data$Freq==1,1,ifelse(
data$Date=="2018-10-01" & data$Freq>=2,0,ifelse(
data$Date=="2018-11-01" & data$Freq<=2,1,ifelse(
data$Date=="2018-11-01" & data$Freq >2,0,ifelse(
data$Date=="2018-12-01" & data$Freq<=3,1,ifelse(
data$Date=="2018-12-01" & data$Freq >3,0,ifelse(
data$Date=="2019-01-01" & data$Freq<=4,1,ifelse(
data$Date=="2019-01-01" & data$Freq >4,0,ifelse(
data$Date=="2019-02-01" & data$Freq<=5,1,ifelse(
data$Date=="2019-02-01" & data$Freq >5,0,ifelse(
data$Date=="2019-03-01" & data$Freq<=6,1,ifelse(
data$Date=="2019-03-01" & data$Freq >6,0,0
))))))))))))
我不断地犯错误,我不知道如何解决我的问题。在很多情况下,如果第一次出现UniqueID不是在10月份,那么虚拟对象将在第二个月到最后一个月=0。有人能给我指出正确的方向吗
library(dplyr); library(lubridate)
data <- read.table(header = T, stringsAsFactors = F,
text = "UniqueID Date Freq
XX343_1 02/01/2019 3
XX343_1 03/01/2019 3
XX343_1 04/01/2019 3
SD229_1 11/01/2018 4
SD229_1 12/01/2018 4
SD229_1 01/01/2019 4
SD229_1 02/01/2019 4
WE321_1 10/01/2018 1"
) %>%
mutate(Date = mdy(Date))
您好@user2813606,我建议使用case_when而不是if_else,因为您有很多条件需要匹配。查看公认的答案,了解它的用法以及使用函数的好方法。
ID_dummy <- data %>%
group_by(UniqueID) %>%
summarize(last_Date = max(Date))
data %>%
left_join(ID_dummy) %>%
mutate(Dummy = if_else(last_Date == Date & month(last_Date) != 4, 1, 0))
#Joining, by = "UniqueID"
# UniqueID Date Freq last_Date Dummy
#1 XX343_1 2019-02-01 3 2019-04-01 0
#2 XX343_1 2019-03-01 3 2019-04-01 0
#3 XX343_1 2019-04-01 3 2019-04-01 0
#4 SD229_1 2018-11-01 4 2019-02-01 0
#5 SD229_1 2018-12-01 4 2019-02-01 0
#6 SD229_1 2019-01-01 4 2019-02-01 0
#7 SD229_1 2019-02-01 4 2019-02-01 1
#8 WE321_1 2018-10-01 1 2018-10-01 1