na.locf将数据从数字转换为字符

ec0*_*cus 10 r plyr zoo

    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     
Run Code Online (Sandbox Code Playgroud)

然后我用上一期间的值填写缺失值

    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     
Run Code Online (Sandbox Code Playgroud)

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

G. *_*eck 5

1) na.locf适用于动物园对象,向量和矩阵,而不是data.frames,所以请尝试将其单独应用于每个列,然后重新构建data.frame:

ddply(DF, .(fx_code), function(x) replace(x, TRUE, lapply(x, na.locf))
Run Code Online (Sandbox Code Playgroud)

2)或者这个:

na.locf.data.frame <- 
  function(object, ...) replace(object, TRUE, lapply(object, na.locf, ...))
ddply(DF, .(a), na.locf)
Run Code Online (Sandbox Code Playgroud)

3)如果日期DF是唯一的,fx_code那么它可以表示为宽动物园对象,但不能作为长动物对象,因为动物园对象基于矩阵或向量,因此它们的列必须都是同一类.对于显示的数据框,如果日期在fx_code以下内容中是唯一的,则可以使用:

z <- read.zoo(DF, split = 1, index = 2)
na.locf(z)
Run Code Online (Sandbox Code Playgroud)

例如,试试这个:

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

注意

因为na.locf现在写的也适用于数据帧.