【问题标题】:How to convert a factor vector to POSIXct in ff or ffbase如何在 ff 或 ffbase 中将因子向量转换为 POSIXct
【发布时间】:2014-12-14 01:17:53
【问题描述】:

read.csv.ffdf 读入一个大型数据集后,其中一列是时间。例如2014-10-18 00:01:02,表示该列中的 100 万行。该列是一个因素。如何将其转换为ff 支持的POSIXct?只需使用as.POSIXct() 只需将值转换为NA

或者当我在开始读取数据集时,我可以指定该列为POSIXct吗?

我的目标是获取月份和日期(甚至小时)。因此,除了转换为 POSIXct 之外,我对解决方案持开放态度。

例如,我们有 9 x 2 表,

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

两列分别是ID(数值类)和时间(因子类)

这是输入

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")

【问题讨论】:

  • 请提供一小部分数据样本,输出为dput(head(data))
  • 对于因子转换,您需要先在列上执行as.character。然后你可以将它传递给as.POSIXct
  • 好像应用as.character后,列还是因子类。我认为问题在于 ff 不支持字符......也许我弄错了......
  • K 忘记dput 因为指针我们不能使用它。我的错

标签: r posixct ff ffbase


【解决方案1】:

读入数据时使用colClasses。 例如以两列为例:ID(数字类)和time(因子类):

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

【讨论】:

    【解决方案2】:

    您可以使用 from package 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" ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2015-08-28
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多