merge.xts未使用R合并所有数据

merge.xts未使用R合并所有数据,r,merge,character,numeric,xts,R,Merge,Character,Numeric,Xts,我正在尝试对下面的xts系列进行重新分类,因为列1-8是字符并且假定为数字,列9-10是字符,因为它们假定为 # data x <- structure(c(NA, NA, "41.95", "30.55", "29.05", "23.71", NA, "23.80", NA, NA, "18.67", NA, "16.90", "17.10", "14.90", "13.64", "12.70", "11.65", "10.75", " 9.75", " 9.05", " 7.95"

我正在尝试对下面的xts系列进行重新分类,因为列1-8是字符并且假定为数字,列9-10是字符,因为它们假定为

# data
x <- structure(c(NA, NA, "41.95", "30.55", "29.05", "23.71", NA, "23.80", 
NA, NA, "18.67", NA, "16.90", "17.10", "14.90", "13.64", "12.70", 
"11.65", "10.75", " 9.75", " 9.05", " 7.95", " 6.70", " 6.02", 
" 5.05", NA, NA, " 0.00", " 0.00", " 0.28", "-0.29", NA, " 0.00", 
NA, NA, "-1.28", NA, "-1.10", " 0.00", "-0.30", "-1.51", "-1.50", 
"-2.66", "-1.50", "-1.45", "-1.15", "-0.45", "-0.75", "-1.38", 
"-0.45", "48.20", "43.20", "38.20", "33.20", "28.25", "23.30", 
"22.25", "21.25", "20.30", "19.35", "18.35", "17.40", "16.35", 
"15.50", "14.50", "13.55", "12.55", "11.55", "10.60", " 9.65", 
" 8.65", " 7.70", " 6.80", " 5.90", " 5.00", "48.80", "43.80", 
"38.80", "33.80", "28.65", "23.65", "22.80", "21.65", "20.65", 
"19.65", "18.65", "17.70", "16.70", "15.65", "14.70", "13.70", 
"12.65", "11.75", "10.75", " 9.80", " 8.80", " 7.85", " 6.95", 
" 6.00", " 5.10", "     0", "     0", "    21", "    27", "     0", 
"   356", "     0", "    82", "     0", "     0", "   323", "     0", 
"   444", "   242", "   223", "  1304", "   362", "   263", "   126", 
"   690", "  1445", "   624", "   476", "   995", "   730", NA, 
NA, NA, NA, "   71", "  131", NA, NA, NA, NA, "  435", NA, "   42", 
NA, "  171", "  423", "   83", "   39", "   20", "    6", "  124", 
"   42", "  177", "  425", "  344", " 65.00", " 70.00", " 75.00", 
" 80.00", " 85.00", " 90.00", " 91.00", " 92.00", " 93.00", " 94.00", 
" 95.00", " 96.00", " 97.00", " 98.00", " 99.00", "100.00", "101.00", 
"102.00", "103.00", "104.00", "105.00", "106.00", "107.00", "108.00", 
"109.00", NA, NA, "  0.00", "  0.00", "  0.97", " -1.21", NA, 
"  0.00", NA, NA, " -6.42", NA, " -6.11", "  0.00", " -1.97", 
" -9.97", "-10.56", "-18.59", "-12.24", "-12.95", "-11.27", " -5.36", 
"-10.07", "-18.65", " -8.18", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", "Sep 25, 2015", 
"Sep 25, 2015", "Sep 25, 2015"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1442534400, 
1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 
1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 
1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 
1442534400, 1442534400, 1442534400, 1442534400, 1442534400, 1442534400
), tzone = "UTC", tclass = "Date"), .Dim = c(25L, 10L), .Dimnames = list(
    NULL, c("p", "c", "b", "a", "oi", "vol", "strike", "cp", 
    "callput", "expiry")))
#数据

x
xts
是一个
矩阵
,位于表面之下,因此它必须是全数字或全字符。对于金融应用程序,它通常必须是数字,因此问题变成如何处理字符列

如果字符数据列只能是几个可能值中的一个,那么实际上有一个因子。您的通话/通话栏符合以下条件:

as.numeric( factor( c("C","C","P"), levels=c("C","P" ) ) )  #1 1 2
显然,你需要提前知道你所有的因子水平

如果字符列实际上是一个日期戳,例如选项到期列,则有两种方法将其转换为数字。一种是直接将
用作.numeric

as.numeric(as.Date("Sep 25, 2015", "%b %d, %Y"))  #16699
另一个是8位YYYYMMDD编号:

as.numeric(format(as.Date("Sep 25, 2015", "%b %d, %Y"), "%Y%m%d"))  #20150921
我更喜欢后者,因为它更具可读性。(但如果您想直接在其上执行日期算术,则使用前者。)

时间戳和一天中的时间可以以相同的方式处理

如果您的字符串不符合上述情况,则选择不太合适:

  • 使用
    data.frame
    。(在
    行名中的邮戳
    ;您仍然可以
    rbind
    新行;
    子集
    将感兴趣的列放入
    xts
    对象(如果需要的话)
  • 使用并行
    xts
    对象(讨厌的代码气味)
  • xts对象上的属性。(您可以在
    xts
    对象上拥有一个属性,该对象是
    xts
    对象。当字符串仅用于主xts对象中的日期戳子集时,我使用了该属性。)
  • 等待允许写入混合类型的xts类。:-)
我认为在
xts
对象中只有一个类。
x
中的所有列都是字符,但
xx
中的所有列都是数字。当您尝试合并数字和字符时,字符被强制为数字,这将给出
NA
。例如,请参见
as.numeric(“Hello world”)
.xts(和zoo)对象的输出是具有索引属性的矩阵,不能在矩阵中混合类型。因此,解决方法将取决于您试图如何处理这些数据。我想我现在明白了,基本上我需要“callput”和“expiry”列,以便稍后我可以通过R通过这些属性调用数据@JoshuaUlrich我想要
xts
而不是
data.frame
的原因是,随着数据的添加,我将
rowbinding
。。。