저는 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)
reprex 패키지 (v0.3.0)에 의해 2020-03-28에 생성됨
# 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 패키지 (v0.3.0)에 의해 2020-03-28에 생성됨
이 예에서는 모든 플레이어가 즉. id
9 개월의 데이터 (나중에 실제 월 값으로 변경할 수 있음)가 있으면 complete
누락 된 월 시퀀스를 채우고 그 사이에있는 값을 0으로 채울 수 있습니다.
library(dplyr)
dfLong %>%
tidyr::complete(id, time = 1:9) %>%
group_by(id) %>%
mutate(daysPlayed = replace(daysPlayed, is.na(daysPlayed) &
between(row_number(), min(which(!is.na(daysPlayed))),
max(which(!is.na(daysPlayed)))), 0))
# id time daysPlayed
# <dbl> <dbl> <dbl>
# 1 1 1 NA
# 2 1 2 2
# 3 1 3 2
# 4 1 4 3
# 5 1 5 0
# 6 1 6 0
# 7 1 7 3
# 8 1 8 NA
# 9 1 9 NA
#10 2 1 NA
#11 2 2 NA
#12 2 3 2
#13 2 4 0
#14 2 5 2
#15 2 6 0
#16 2 7 2
#17 2 8 NA
#18 2 9 NA
time
각 id
활성 기간에 대한 누락을 채우려면 다음을 사용할 수 있습니다.
dfLong %>%
group_by(id) %>%
tidyr::complete(time = seq(min(time), max(time)), fill = list(daysPlayed = 0))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다