【问题标题】:Replace NAs in a ffdf object替换 ffdf 对象中的 NA
【发布时间】:2012-11-10 17:48:02
【问题描述】:

我正在使用在某些列中具有 NA 的 ffdf 对象。 NA 是使用 merge.ffdf 进行左外部合并的结果。我想用 0 替换 NA,但无法做到。 这是我正在运行的代码:

    library(ffbase)
    deals <- merge(deals,rk,by.x=c("DEALID","STICHTAG"),by.y=c("ID","STICHTAG"),all.x=TRUE)
    attributes(deals)
    $names
    [1] "virtual"   "physical"  "row.names"
    $class
    [1] "ffdf"

vmode(deals$CREDIT_R)
[1] "double"

    idx <- ffwhich(deals,is.na(CREDIT_R)) # CREDIT_R is one of the columns with NAs
    deals.strom[idx,"CREDIT_R"]<-0
    error in `[<-.ffdf`(`*tmp*`, idx, "CREDIT_R", value = 0) : 
      ff/ffdf-iness of value and selected columns don't match

知道我做错了什么吗?一般来说,我想了解更多关于替换类 ff 和 ffdf 的方法。有什么建议可以在哪里找到有关该主题的一些示例?

【问题讨论】:

    标签: r flat-file ff ffbase


    【解决方案1】:

    ff包的说明书中提到了一个叫ffindexset的函数。

    idx <- is.na(deals$CREDIT_R) ## This uses is.na.ff_vector from ffbase
    idx <- ffwhich(idx, idx == TRUE) ## Is part of ffbase
    deals$CREDIT_R <- ffindexset(x=deals$CREDIT_R, index=idx, value=ff(0, length=length(idx), vmode = "double")) ## Is part of ff
    deals$CREDIT_R[idx] <- ff(0, length=length(idx), vmode = "double") ## this one will probably also work
    

    也看看 ?Extract.ff

    【讨论】:

    • 您好 jwijffels,感谢您的回复,但是您提出的两种解决方案在我的情况下都会生成相同的错误消息:*error: length(value) == n is not TRUE*
    • 您好,两种解决方案都有效。一如既往地非常快速和准确的答案。非常感谢!
    • 嗨,是否也可以替换所有列中的所有 NA 而不仅仅是一个?非常感谢
    猜你喜欢
    • 2016-05-24
    • 2012-08-11
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多