3
관측 세트의 경우 응답 이벤트 날짜가 있습니다.어떤 값이 범위에 있는지 확인하십시오.
structure(list(Date1_P2 = structure(c(14061, 14944, 14944), class = "Date"),
Date2_P2 = structure(c(NA, 11566, 11747), class = "Date"),
Date3_P2 = structure(c(NA, 10408, 11627), class = "Date"),
Date4_P2 = structure(c(NA, 8370, 11566), class = "Date")), .Names = c("Date1_P2",
"Date2_P2", "Date3_P2", "Date4_P2"), row.names = c(NA, 3L), class = "data.frame")
> dates
Date1_P2 Date2_P2 Date3_P2 Date4_P2
1 2008-07-01 <NA> <NA> <NA>
2 2010-12-01 2001-09-01 1998-07-01 1992-12-01
3 2010-12-01 2002-03-01 2001-11-01 2001-09-01
나는이 날짜 중 하나가 트리거 이벤트의 범위 내에있는 경우 TRUE
있는 변수를 만들려고합니다. 2001 년 9 월에 관측치가 반응했거나 예상 할 수있는 일이 일어났습니다. I는 다음과 같은 기능, 이벤트의 양측 180 일 이내에 응답이있는 경우
checkmove <- function(event, range, moves){
moves <- as.numeric(moves)
early <- as.numeric(event - range)
late <- as.numeric(event + range)
moved <- any(moves > early & moves < late, na.rm=TRUE)
return(moved)
}
쓸 한 값 TRUE
이어야한다. 이 함수는 한 줄씩 작동하지만 전체 테이블에서 작동하도록 할 수는 없습니다.
# This is right
> checkmove(as.Date("2001-09-01"), 180, dates[1,])
[1] FALSE
> checkmove(as.Date("2001-09-01"), 180, dates[2,])
[1] TRUE
> checkmove(as.Date("2001-09-01"), 180, dates[3,])
[1] TRUE
# This is wrong
> apply(dates, 1, function(x) checkmove(as.Date("2001-09-01"), 180, x))
1 2 3
FALSE FALSE FALSE
Warning messages:
1: In checkmove(as.Date("2001-09-01"), 180, x) :
NAs introduced by coercion
2: In checkmove(as.Date("2001-09-01"), 180, x) :
NAs introduced by coercion
3: In checkmove(as.Date("2001-09-01"), 180, x) :
NAs introduced by coercion
맞음 apply
기능을 사용하고 있지 않습니까? 루프를 for
회피하는 것이 좋습니다. 이것을 시작하는 더 좋은 방법이 있습니까?
우수. 'base'와'plyr' apply 함수 사이의 분열은 R에서 가장 큰 장애물 중 하나라고 느낍니다. – gregmacfarlane
@gmacfarlane plyr 함수는 (특히 입력/출력 데이터 유형에 여러 가지 선택 사항을 제공하기 위해)보다 "사용자 친화적"입니다. . "기본"솔루션이 필요하다면 : 1) for 루프, 2) 'apply'이전의 숫자로의 변환, 3) 날짜로의 변환, 'apply'내부의 숫자로의 변환 (이것은 느려지지만 여전히 유효한 옵션) – Michele