2013-10-17 3 views
2

FFDF를 날짜별로 부분 집합하려고합니다. 아래에서는 정상적인 데이터 프레임을 사용하여 이러한 하위 집합을 만들었습니다. 그러나 이것을 FFDF에 적용하는 데 도움이 필요했습니다. 내 시도는 오류 메시지와 함께 코드 주석에 나열됩니다. 많은 분들께 미리 감사드립니다!R로 큰 데이터 프레임 (ffdf)을 날짜별로 부분 집합하는 방법은 무엇입니까?

#Create a normal data frame (in production this is read directly into an ffdf 
#through a csv file) 

start <- c("01/01/2010", "01/01/2011", "01/01/2012", "01/01/2012", "01/01/2012") 
end <- c("31/12/2010", "31/12/2011", "31/12/2012", "31/12/2012", "31/12/2012") 
amount <- c(10,20,30,40,50) 
df <- data.frame(start,end,amount) 

#Ensure subsetting works on a normal data frame 

    #convert type to proper date (this has to be done in production after csv file 
    #has been read in) 
    df$start <- as.Date(df$start, format="%d/%m/%Y") 
    df$end <- as.Date(df$end, format="%d/%m/%Y") 

    #Subset 
    df <- subset(df, start == as.Date("2012-01-01",format="%Y-%m-%d")) 

    #Works :) Now let's try with ffdf 

ffdf <- as.ffdf(df) 

    #Type conversion for dates (again, applied in production after mammoth csv has 
    #been read in) 
    ffdf$start <- as.Date(ffdf$start, format="%m/%d/%Y") 
    ffdf$end <- as.Date(ffdf$end, format="%m/%d/%Y") 

    #Subset 
    ffdf <- subset.ff(ffdf, start==as.Date("2012-01-01",format="%Y-%m-%d")) 
    #ERROR: Error in ffdf(x = x) : ffdf components must be atomic ff objects 

답변

2

패키지 ffbase에서 subset.ffdf를 사용하십시오. 서브 세트는 R의 제네릭 함수이고 ffbase는 ffdf 객체를 위해이 함수를 구현합니다. 따라서 일반 데이터 프레임과 마찬가지로 하위 집합을 사용할 수 있습니다.

df <- data.frame(start=c("01/01/2010", "01/01/2011", "01/01/2012", "01/01/2012", "01/01/2012"),end=c("31/12/2010", "31/12/2011", "31/12/2012", "31/12/2012", "31/12/2012"),amount=c(10,20,30,40,50)) 
df$start <- as.Date(df$start, "%d/%m/%Y") 
df$end<- as.Date(df$end, "%d/%m/%Y") 

require(ffbase) 
myffdf <- as.ffdf(df) 
test <- subset(myffdf , start==as.Date("2012-01-01",format="%Y-%m-%d")) 
test 
+0

고맙습니다. 난 그냥 코드를 실행하려고했지만 다음과 같은 오류가 반환 : UseMethod ("as.hi")의 오류 : 'as.hi'의 적용 가능한 메서드는 "NULL"클래스의 개체에 적용됩니다. 나는 간단한 코드 조각을 고치는 방법을 놓치고있다. 그래도 정말 유망 해 보입니다. 다시 감사합니다. –

+0

예를 들어 주셔서 감사합니다. subset.ffdf에 작은 문제가 있음을 확인했습니다.이 문제는 현재 ffbase 개발 버전에서 수정되었습니다. 라이브러리 (devtools)를 통해 설치할 수 있습니다. install_github ("ffbase", "edwindj", subdir = "pkg"); 이렇게하면 문제가 해결됩니다. – jwijffels

+0

감사합니다. 그 수정이 효과가있다. 위에 설명 된대로 Github에서 ffbase 패키지의 고정 버전을 설치해야했습니다. devtools는 R의 이전 버전에서 사용할 수 없기 때문에 R의 최신 버전을 최신 버전으로 업그레이드해야했습니다. 또한 devtools에는 자동으로 설치되지 않은 libcurl에 대한 의존성이 있으므로 devtools도 함께 설치해야했습니다. 명령 "sudo apt-get install libcurl4-openssl-dev"를 메인 우분투 터미널 (R 콘솔이 아님)에 설치하십시오. –

관련 문제