문제

오늘과 가장 가까운 일요일을 찾으려고 합니다.

나는 오늘을 이렇게 정의합니다.

dt <- as.Date("2014-06-04")

다음을 통해 마지막 일요일을 찾을 수 있습니다.

dt - as.POSIXlt(dt)$wday
[1] "2014-06-01"

다음을 통해 다음 일요일을 찾을 수 있습니다.

dt + as.POSIXlt(dt)$wday
[1] "2014-06-07"

다음이 작동하지 않는 이유를 잘 모르겠습니다.

ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday)
[1] 16222

전화번호를 받고 있습니다: 16222 데이트 대신.

다음 문은 각각 예상대로 작동합니다.

as.POSIXlt(dt)$wday
class(as.POSIXlt(dt)$wday)
as.POSIXlt(dt)$wday <= 3

어떤 아이디어??

도움이 되었습니까?

해결책

ifelse가 벡터를 반환하고 날짜에서 "POSIX"클래스를 스트립 한 것으로 나타납니다.

가되는 이유는 무엇입니까?
dt + ifelse(as.POSIXlt(dt)$wday <= 3, -1, 1) * as.POSIXlt(dt)$wday
.

대신.

다른 팁

다른 해결책 : e.g를 호출하여 클래스 속성을 복원하십시오.

structure(ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday), class="Date")
.

여기에서 ifelse를 사용할 필요가 없습니다. 클래식 if/else가 작업을 수행합니다.

if(as.POSIXlt(dt)$wday <= 3) dt - as.POSIXlt(dt)$wday else dt + as.POSIXlt(dt)$wday
[1] "2014-06-01"
.

또는 심지어 더 간단합니다 :

wday <- as.POSIXlt(dt)$wday 
dt + if(wday<= 3) -wday else wday
.

1) 이 시도:

wday <- as.POSIXlt(dt)$wday
dt + ifelse(wday <= 3, -wday, 7-wday)

이는 다음을 적용합니다. ifelse 일수를 더하거나 뺍니다. ifelse 일반 숫자에는 잘 작동하지만 다음과 같은 복잡한 유형에는 작동하지 않습니다. "Date" 클래스를 사용하면 응용 프로그램을 피할 수 있습니다. ifelse 에게 "Date" 클래스 객체.

만약에 참고하세요 wday > 3 그럼 우리는 추가하고 싶습니다 7-wday 그리고는 아니다 wday (질문에서와 같이).

여기의 솔루션은 다음과 같은 경우에도 계속 작동합니다. dt 날짜로 구성된 벡터입니다.

2) (1)의 답의 두 번째 줄은 먼저 마지막 일요일을 계산하는 다음과 같은 방식으로 작성할 수 있습니다(dt-wday) 그 주의 지난 수요일인 경우 다음 일요일을 얻으려면 7을 더합니다.

dt - wday + ifelse(wday > 3, 7, 0)

3) 이를 표현하는 또 다른 방법은 다음과 같습니다.

dt - wday + 7 * (wday > 3)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top