【问题标题】:na.locf converts data from numeric to characterna.locf 将数据从数字转换为字符
【发布时间】:2014-05-11 08:43:54
【问题描述】:
    summary(DF)

>fx_code          date               fx_spot              fx_fwd         implied_fx_vol  
 AUD    : 171   Min.   :2000-01-31   Min.   :    0.394   Min.   :-320.000   Min.   : 1.000  
 BRL    : 171   1st Qu.:2003-07-31   1st Qu.:    1.623   1st Qu.:  -2.615   1st Qu.: 7.180  
 CAD    : 171   Median :2007-02-28   Median :    6.117   Median :   6.070   Median : 9.842  
 CHF    : 171   Mean   :2007-02-28   Mean   :  449.477   Mean   :  63.569   Mean   :10.656  
 CLP    : 171   3rd Qu.:2010-09-30   3rd Qu.:   43.475   3rd Qu.:  64.055   3rd Qu.:12.809  
 COP    : 171   Max.   :2014-03-31   Max.   :12360.000   Max.   :1438.800   Max.   :62.810  
 (Other):4275                                            NA's   :310        NA's   :783     

然后我用上一时期的值填充缺失值

    DF2 <- ddply(DF, .(fx_code), na.locf)
    summary(DF2)

>   fx_code              date             fx_spot             fx_fwd          implied_fx_vol    
 Length:5301        Length:5301        Length:5301        Length:5301        Length:5301       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character     

这会将所有内容转换为字符格式。关于如何解决这个问题的任何想法?>提前感谢

【问题讨论】:

    标签: r plyr zoo


    【解决方案1】:

    1) na.locf 适用于动物园对象、向量和矩阵,而不是 data.frames,因此请尝试将其分别应用于每一列,然后重建 data.frame:

    ddply(DF, .(fx_code), function(x) replace(x, TRUE, lapply(x, na.locf))
    

    2) 或者这个:

    na.locf.data.frame <- 
      function(object, ...) replace(object, TRUE, lapply(object, na.locf, ...))
    ddply(DF, .(a), na.locf)
    

    3) 如果DF 的日期在fx_code 中是唯一的,那么它可以表示为一个宽动物园对象,但不像动物园对象基于矩阵或向量那样长所以他们的列必须都属于同一类。对于显示的数据框,如果日期在 fx_code 中是唯一的,这将起作用:

    z <- read.zoo(DF, split = 1, index = 2)
    na.locf(z)
    

    例如,试试这个:

     DF <- data.frame(a = c("a", "a", "b", "b"), b = Sys.Date() + 0:3, c = 1:4)
    

    注意

    自从na.locf 编写后,它现在也适用于数据帧。

    【讨论】:

    • 谢谢。我可以通过执行 df.zoo 之类的操作将我的数据框转换为动物园对象吗
    • 我在答案中添加了一些内容,以解决将 DF 变成动物园对象的问题。
    • 对于第一个解决方案,我应该尝试 ddply 对吗? ddplyr 不再存在于 plyr (cran.r-project.org/web/packages/plyr/plyr.pdf)
    • 是的,我现在已经更正了这个问题并更新了动物园(第三个)答案。
    • 嗨 - 我收到选项 1 的以下错误:错误:替换元素 9 有 168 行,需要 171 - 这是什么意思?
    【解决方案2】:

    你也可以使用 colwise(na.locf)(df) 来避免类转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      相关资源
      最近更新 更多