2014-10-18 1 views
3

read.csv.ffdf으로 큰 데이터 세트를 읽은 후 열 중 하나가 시간입니다. 해당 열의 1 백만 행에 대해 2014-10-18 00:01:02과 같이 그 열은 하나의 요소입니다. ff에 의해 지원되는 POSIXct으로 변환하려면 어떻게해야합니까? 단순히 as.POSIXct()을 사용하면 값이 NAff 또는 ffbase에서 계수 벡터를 POSIXct로 변환하는 방법

으로 바뀝니다. 처음에 데이터 세트를 읽을 때 해당 열을 POSIXct으로 지정할 수 있습니까?

내 목표는 월과 일 (또는 심지어 시간)을 얻는 것입니다. 그래서 나는 POSIXct으로 변환하는 것 이외의 다른 해결책을 열어두고 있습니다.

는 예를 들어, 우리는

test <- read.csv.ffdf(file="test.csv", header=T, first.rows=-1) 

두 열 ID (숫자 등급), 및 시간 (계수 클래스) 여기서

있는 2 테이블이 9가있다 dput

structure(list(virtual = structure(list(VirtualVmode = c("integer", 
"integer"), AsIs = c(FALSE, FALSE), VirtualIsMatrix = c(FALSE, 
FALSE), PhysicalIsMatrix = c(FALSE, FALSE), PhysicalElementNo = 1:2, 
    PhysicalFirstCol = c(1L, 1L), PhysicalLastCol = c(1L, 1L)), .Names = c("VirtualVmode", 
"AsIs", "VirtualIsMatrix", "PhysicalIsMatrix", "PhysicalElementNo", 
"PhysicalFirstCol", "PhysicalLastCol"), row.names = c("ID", "time" 
), class = "data.frame", Dim = c(9L, 2L), Dimorder = 1:2), physical = structure(list(
    ID = structure(list(), physical = <pointer: 0x000000000821ab20>, virtual = structure(list(), Length = 9L, Symmetric = FALSE), class = c("ff_vector", 
    "ff")), time = structure(list(), physical = <pointer: 0x000000000821abb0>, virtual = structure(list(), Length = 9L, Symmetric = FALSE, Levels = c("10/17/2003 0:01", 
    "12/5/1999 0:02", "2/1/2000 0:01", "3/23/1998 0:01", "3/24/2013 0:00", 
    "5/29/2004 0:00", "5/9/1985 0:01", "6/14/2010 0:01", "6/25/2008 0:02" 
    ), ramclass = "factor"), class = c("ff_vector", "ff"))), .Names = c("ID", 
"time")), row.names = NULL), .Names = c("virtual", "physical", 
"row.names"), class = "ffdf") 
+1

이 들어 dput'의 출력 (머리 (데이터))' –

+0

하여 데이터의 작은 샘플을 제공하십시오 factor 변환을 사용하려면 먼저 컬럼에서 as.character를 수행해야합니다. 그러면 그것을 as.POSIXct'에 전달할 수 있습니다. – hrbrmstr

+0

as.character를 적용한 후에도 열은 여전히 ​​factor 클래스입니다. 나는 문제가 ff가 문자를 지원하지 않는다고 생각한다 ... 아마도 나는 실수라고 생각한다. –

답변

1

아래 예제와 같이 ffbase 패키지에서 사용할 수 있습니다. 베스트.

require(ff) 
x <- data.frame(id = 1:100000, timepoint = seq(from = Sys.time(), by = "sec", length.out = 100000)) 
x$timepoint <- as.factor(x$timepoint) 

xff <- as.ffdf(x) 
class(xff) 
require(ffbase) 
xff$time <- with(xff, as.POSIXct(as.character(timepoint)), by = 10000) 
ramclass(xff$time) 
[1] "POSIXct" "POSIXt" 
str(xff[1:10, ]) 
'data.frame': 10 obs. of 3 variables: 
$ id  : int 1 2 3 4 5 6 7 8 9 10 
$ timepoint: Factor w/ 100000 levels "2014-10-20 09:14:10",..: 1 2 3 4 5 6 7 8 9 10 
$ time  : POSIXct, format: "2014-10-20 09:14:10" "2014-10-20 09:14:11" "2014-10-20 09:14:12" "2014-10-20 09:14:13" ... 
0

데이터를 읽을 때 colClasses을 사용하십시오. 예 : ID (숫자 클래스), 및 time (요소 클래스) : 두 개의 열이 당신의 예와

test <- read.csv.ffdf(file="test.csv", header=T, first.rows=-1,colClasses = c("integer","POSIXct")) 
관련 문제