2014-11-21 6 views
1

왜이 오류가 발생하는지 궁금합니다. 루프에서 순차적 변환을 할 때 대괄호를 사용하여 변환하고 싶습니다. 그리고 나는 단지 그것을 할 수 있고 일어나고있는 일을 이해하기를 원하기 때문입니다.문자열 data.frame을 날짜로 변환

head(clean.deposit.rates) 
     Date 
1 1/31/1983 
2 2/28/1983 
3 3/31/1983 
4 4/30/1983 
5 5/31/1983 
6 6/30/1983 

class(clean.deposit.rates) 
[1] "data.frame" 

class(as.Date(clean.deposit.rates[[1]], "%m/%d/%Y")) 
[1] "Date" 



    class(as.Date(clean.deposit.rates$Date, "%m/%d/%Y")) 
[1] "Date" 



as.Date(clean.deposit.rates["Date"], "%m/%d/%Y") 
    Error in as.Date.default(clean.deposit.rates["Date"], "%m/%d/%Y") : 
     do not know how to convert 'clean.deposit.rates["Date"]' to class “Date” 

답변

2

두 개의 [ 브래킷을 사용해야합니다. 1을 사용하면 열은 데이터 프레임으로 유지됩니다. 두으로 제대로 df["Date"] 때문에 정확한 as.Date 방법

as.Date(df["Date"], "%m/%d/%Y") 
# Error in as.Date.default(df["Date"], "%m/%d/%Y") : 
# do not know how to convert 'df["Date"]' to class “Date” 

에 전달 될 수있는 원자 벡터된다 클래스 data.frame, 아니 as.Date.data.frame 방법이 없기 때문에 xas.Date.default 인수를 사용한다. x 모든 if 문에 대한 FALSE하고 df[["Date"]]를 사용하여 라인

stop(gettextf("do not know how to convert '%s' to class %s", 
    deparse(substitute(x)), dQuote("Date")), domain = NA) 

as.Date.default을 통해 계속 때문에 오류가 트리거, 열이 벡터가되고 벡터의 클래스에 따라 하나 as.Date.character 또는 as.Date.factor에 전달 , 원하는 결과가 리턴됩니다.

as.Date(df[["Date"]], "%m/%d/%Y") 
# [1] "1983-01-31" "1983-02-28" "1983-03-31" "1983-04-30" "1983-05-31" 
# [6] "1983-06-30" 
3

단일 데이터 프레임에서 여러 열에 대해이 작업을 수행하려는 경우 lapply 기능을 사용하십시오. 다음과 같음 :

colNames <- c('StartDate','EndDate') 

mydf[colNames] <- lapply(mydf[colNames], as.Date, "%m/%d/%Y") 
+0

(+1) 반복되는 부분을 언급하는 것을 잊어 버린 것 같습니다. :) –