다음 데이터 세트가 있습니다.
A B
2007-11-22 2004-11-18
<NA> 2004-11-10
A 열의 값이 NA이면이 값을 B의 날짜로 바꾸고 싶습니다. 단 25 일이 더 추가되었습니다. 결과는 다음과 같습니다.
A B
2007-11-22 2004-11-18
2004-12-05 2004-11-10
지금까지 다음 if else 공식을 시도했지만 성공하지 못했습니다.
library(lubridate)
data$A<- ifelse(is.na(data$A),data$B+days(25),data$A)
아무도 나에게 무엇이 잘못되었는지 말하거나 대체 해결책을 줄 수 있습니까? 내 데이터 세트를 빌드하는 코드는 다음과 같습니다.
A<-c("2007-11-22 01:00:00", NA)
B<-c("2004-11-18","2004-11-10")
data<-data.frame(A,B)
data$A<-as.Date(data$A);data$B<-as.Date(data$B)
문제의 원인은의 소스 코드에서 추적 할 수 있습니다 ifelse
. 를 입력하면 View(ifelse)
아래와 같이 소스 코드 하단에 몇 줄이 표시됩니다.
ans <- test
len <- length(ans)
ypos <- which(test)
npos <- which(!test)
if (length(ypos) > 0L)
ans[ypos] <- rep(yes, length.out = len)[ypos]
if (length(npos) > 0L)
ans[npos] <- rep(no, length.out = len)[npos]
ans
여기서는 test
논리 배열이며 ans
의 복사본으로 초기화됩니다 test
. 실행할 때 ans[ypos] <- rep(yes, length.out = len)[ypos]
의 클래스 ans
가 numeric
대신으로 강제 변환됩니다 Date
. 그렇기 때문에을 A
사용한 후 열에 정수가 ifelse
있습니다.
아래 코드를 시도해 볼 수 있습니다.
data$A <- as.Date(ifelse(is.na(data$A), data$B + days(25), data$A), origin = "1970-01-01")
주는
> data
A B
1 2007-11-22 2004-11-18
2 2004-12-05 2004-11-10
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다