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
这会将所有内容转换为字符格式。有关如何解决此问题的任何想法?>预先感谢
最佳答案
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
中是唯一的,则可以将其表示为一个宽泛的Zoo对象,但不能表示为一个很长的Zoo对象,因为Zoo对象是基于矩阵或向量的,因此它们的列必须全部属于同一类。对于所示的数据框,如果日期在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
现在也适用于数据帧。关于r - na.locf将数据从数字转换为字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22771260/