背景:
我正在处理一个大型数据集,其中包含195,318名参与者赌博行为的纵向数据。该数据基于对一家赌博运营商内电子赌博行为的完全跟踪。赌博行为数据按月聚合,共计70个月。我有一个ID变量将参与者分开,一个时间变量(月份),以及许多赌博行为变量,如给定月份玩的活跃天数,下注量,总损失等。参与者在何时进行赌博活动方面存在差异。一个参与者可能在第2、3、4和7个月进行了赌博,另一个参与者可能在第3、5和7个月进行了赌博,第三个参与者可能在23、24、48、65等月进行了赌博。因此,存在大量“缺失值”。但是,由于记录了每次赌博,因此在此数据集中缺失意味着该人没有进行赌博。换句话说,缺失等于0。
问题/目标:
我想为缺失值(“NA”)插入0。但是我只想在特定情况下这样做。具体而言,我想在我定义的参与者的“活动期间”内为缺失值插入0,并将其他所有内容保留为原样。
参与者的活动期间是从他们开始赌博的第一个月到最后一个月的每个月。例如,对于在第2、3、4和7个月进行了赌博的参与者,我想在第5和6个月为其插入0。每个其他月份,即1和9至70,我希望保持为NA。我正在努力编写实现此目标的代码。我是R的新手。
示例数据框和代码
下面是一个示例代码,生成了一个数据框,展示了我问题中描述的关键特征。在这段代码中,只有2名参与者,1个赌博行为变量和10个时间点(“波”)。我包括了“长格式”和“宽格式”的数据框,因为我不确定哪一个会更有帮助/信息量。在“长格式”中包含时间变量。我的实际数据集是长格式,但我知道如何在两种格式之间切换。
# Example variables and data frame in long form
# Includes id variable, time variable and example variable
id <- c(1, 1, 1, 1, 2, 2, 2)
time <- c(2, 3, 4, 7, 3, 5, 7)
daysPlayed <- c(2, 2, 3, 3, 2, 2, 2)
dfLong <- data.frame(id = id, time = time, daysPlayed = daysPlayed)
这段内容是在2020年3月28日由 reprex包 (v0.3.0) 创建的。
# Example variables and data frame in wide form
# Includes id variable, days played in given month
id <- c(1, 2)
daysPlayed.1 <- c(NA, NA)
daysPlayed.2 <- c(2, NA)
daysPlayed.3 <- c(2, 2)
daysPlayed.4 <- c(3, NA)
daysPlayed.5 <- c(NA, 2)
daysPlayed.6 <- c(NA, NA)
daysPlayed.7 <- c(3, 2)
daysPlayed.8 <- c(NA, NA)
daysPlayed.9 <- c(NA, NA)
daysPlayed.10 <- c(NA, NA)
dfWide <- data.frame(id=id, daysPlayed.1 = daysPlayed.1, daysPlayed.2 = daysPlayed.2,
daysPlayed.3 = daysPlayed.3, daysPlayed.4 = daysPlayed.4,
daysPlayed.5 = daysPlayed.5, daysPlayed.6 = daysPlayed.6,
daysPlayed.7 = daysPlayed.7, daysPlayed.8 = daysPlayed.8,
daysPlayed.9 = daysPlayed.9, daysPlayed.10 = daysPlayed.10)
本示例由reprex package (v0.3.0)创建于2020年03月28日。