【问题标题】:Replacing N/A with other value in data.table returns error用 data.table 中的其他值替换 N/A 会返回错误
【发布时间】:2016-01-29 17:34:36
【问题描述】:

我想将 NA 替换为 data.table 中特定列的其他值。 我尝试了下面的链接,但出现了一些错误。

How to replace NA values in a table for selected columns? data.frame, data.table

我使用的代码是

df<-data.table(aa<-(1:4),ba<-c(NA,1,3,4),ca<-c(NA,"2012-01-02","2012-02-02","2012-03-02"))

df[is.na(get(ca)),(ca):="2012-04-01"]

我收到错误消息:get(c) 中的错误:找不到对象“NA”

但是如果我使用

df[is.na(ca),(ca):="2012-04-01"]

它返回我不想要的结果。

谁能帮帮我?

谢谢

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    如果我们使用正确的列名,它会起作用,我们不需要get

    df[is.na(ca), ca:= "2012-04-01"]
    df
    #  aa ba         ca
    #1:  1 NA 2012-04-01
    #2:  2  1 2012-01-02
    #3:  3  3 2012-02-02
    #4:  4  4 2012-03-02
    

    data.table 调用中,我们使用= 而不是&lt;-。此外,正如@Frank 所提到的,分配(ca)ca 是不同的,因为前者可能是可用于为新列创建名称的字符串vector

    数据

    df<-data.table(aa=(1:4),ba=c(NA,1,3,4),
         ca=c(NA,"2012-01-02","2012-02-02","2012-03-02"))
    

    【讨论】:

    • 也许值得注意:(ca) := xca := x 非常不同,因为前者(OP 正在这样做)实际上将 ca 的值作为新列的名称。
    • to OP: get 需要一个 character 常量,所以 df[is.na(get("c")), ("c") := "2012-04-01"] 可以工作(尽管在这种情况下是不必要的复杂)。 akrun 的方法是要走的路。
    • 谢谢。 @akrun 和 @MichealChirico。我学会了两种方法来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多