【问题标题】:Convert character to numeric in xts object在 xts 对象中将字符转换为数字
【发布时间】:2015-03-23 23:39:39
【问题描述】:

我的愿望是将以下 xts 对象中的所有数字转换为数字。

Morover,如果可能的话,用同一列中的前一个数字替换 NA

library(xts)
x <- structure(c("1176.67", "1175.37", "1196.10", "1182.90", "1200.30", 
"1183.20", "170.0674", "170.0586", NA, "170.1376", "170.1651", 
"170.1844", "252.10", "252.07", "252.07", "252.23", "252.34", 
"252.40", "616.09", "618.49", "620.44", "624.61", "626.66", "627.92", 
"1.44730", "1.44430", NA, "1.43710", "1.44730", "1.44120", "5238.815", 
"5238.458", "5256.423", "5261.352", "5235.514", "5182.277", "5669.918", 
"5673.797", "5668.293", "5677.272", "5613.539", "5608.027", "399.106", 
"398.800", "399.411", "402.521", "400.797", "401.521"), class = c("xts", 
"zoo"), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", 
"POSIXt"), .indexTZ = "GMT", tzone = "GMT", index = structure(c(1419292800, 
1419379200, 1419552000, 1419811200, 1419897600, 1419984000),
tzone = "GMT", tclass = c("POSIXct", "POSIXt")), .Dim = c(6L, 8L),
.Dimnames = list(NULL, c("GC1 COMDTY", "IBOXXMJA", "LT01TRUU",
"LT11TRUU", "MEDLCCU", "NDDLUS", "NDDUE15", "NDUEEGF")))

【问题讨论】:

    标签: r xts


    【解决方案1】:

    您可以将storage.mode 设置为数字。

    storage.mode(x) <- "numeric"
    

    但我鼓励您首先寻找数据被转换为角色的根本原因/来源。如果您的对象中的某些值无法表示为数字,则将storage.mode 设置为数字可能具有破坏性(如果任何值无法转换,R 将抛出警告)。

    转换成数值后,可以使用na.locf将缺失值补上之前的值。

    x <- na.locf(x)
    

    【讨论】:

    • 或许值得一提的是na.locf来自zoo包?
    • @DMC:为什么?如果您使用的是 xts,则必须加载 zoo(xts 取决于 zoo)。如果您在 xts 对象上调用 na.locf,则会调度 na.locf.xts
    • 虽然 OP 可能已经加载了 zoo,但作为问题的重现者,完全有可能在内存中有 zoo 类的对象但没有加载 zoo 包。试图重现问题,我得到了`错误:找不到函数“na.locf”'
    • @DMC:那么问题是你需要加载xts,它也会加载zoo。我将编辑 OP。
    • 谢谢,storage.mode 对我来说没问题。也可以将 as.numeric 用于核心数据并在重建 xts 对象之后。
    【解决方案2】:

    你可以试试这个:

    x1 <- apply(x,2,as.numeric)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-21
      • 2018-09-03
      • 2016-01-07
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多