2010-07-09 6 views
2

일반적인 날짜 형식을 표준 날짜로 변환하려고합니다. 기본적으로 필자는 반년주기 형식의 기간을 포함하는 데이터 집합을 가지고 있습니다. 즉, 206은 2006 년 하반부를 나타내고, 106은 상반기를 나타냅니다. 2006-06-01에 2006-01-01로 다시 정렬하기 위해 작은 함수를 작성했습니다.R에서 열을 바꾸는 방법은 무엇입니까? 날짜가 이상한 동작

period2date = function(period) 
{ 
check=list() 
check=strsplit(as.character(period),split="") 
x=as.numeric(check[[1]][1]) 
p=ifelse(x >= 2,6,1) 
x=2 

out=paste(x,"0",check[[1]][2],check[[1]][3],"-",p,"-1",sep="") 
out=as.Date(out) 


return(out)  
} 

웃을 수 있습니다 :). 어쨌든, 그 기능이 작동하고 여기에 문제가 온다. 이 함수를 data.frame의 time 열에 적용하고 싶습니다. 나는 시도 다음과 같은 : 내가 원하는에 가장 가까운 결과를 반환

as.data.frame(lapply(mydf$period,period2date)) 

: 등 structure.13665..class .... 날짜를 .. 1 2006-06-01

과 .. 분명히 내 칼럼의 이름을 지키는 것을 좋아할 것입니다. 아니면 원본 형식의 df에 새로 포맷 된 날짜를 추가하는 것뿐입니다. 게다가 나는 시도 :

sapply(mydf$period,period2date) # with results equal to the line below 
unlist(lapply(mydf$period,period2date)) 

[1] 13300 13514 13665

내가 열 (작동) 2006-06-01에 드문 (206) 등의 형식을 변경하면됩니다 및 추가 할 모든 mydf하기 (작동하지 않음)

thx 어떤 제안 사항이 있습니까?

답변

2

R은 날짜를 숫자로 저장합니다. 따라서 날짜 출력 (예 : 날짜를 행렬에 넣으면 실제로 숫자로 표시됩니다. 대신 명시 적으로 data.frame()과 함께 data.frame을 사용해야합니다. 당신은 벡터화 작업을 사용하는 경우 또한, 당신은 시간을 절약 할 수있다 (필자는 apply 가족이 여전히 루프를 사용하여 생각) :

period2date <- function(period) { 
    period <- as.character(period) 
    half <- substr(period, 1, 1) 
    year <- substr(period, 2, 3) 
    dates <- as.Date(ifelse(half=="1", paste(year, "0101", sep=""), paste(year, "0701", sep="")), format="%y%m%d") 
    return(dates) 
} 

data <- data.frame(data, period2date(data$dates)) 

당신은 또한 시간/날짜 열을 추가 부사장을 대체하여이 청소기를 만들 수 있습니다.

0

이 이상하다 ... :

as.Date(sapply(mydf$period,period2date)) 

반환 "2006-06-01", "2006-01-01"등 period2date 기능이 이미 as.Date 포함되어 있기 때문에 내가 기절입니다(). 이것은 내 문제에 대한 해결책이지만 완전히 이해하지 못합니다 ...