将数据帧列表转换为xts对象列表会将数据转换为字符-无法访问[在R中]

时间:2018-09-16 09:52:13

标签: r dataframe xts

给出跟踪器名称的向量,例如:datanames = c("A", "B", "C", "D", "E")

我使用此向量从.csv收集数据并将其放入以跟踪器命名的数据帧列表中。

for (stocks in datanames) 
{
  stockdfs[[stocks]] = mycsv[mycsv$tracker == stocks,]
}

这很好用。

我现在正尝试将此列表转换为包含xts对象的列表,以便可以对其进行一些时间序列分析。因此,我添加:

      row.names(stockdfs[[stocks]]) = stockdfs[[stocks]]$Date #xts requirement
##BELOW IS WHERE THE PROBLEM LIES##
      stockxts[[stocks]] = as.xts(stockdfs[[stocks]])
      stockinsampxts[[stocks]] = as.xts(stockdfs[[stocks]][0:2000,])
      stockoutsampxts[[stocks]] = as.xts(stockdfs[[stocks]][2000:nrow(stockdfs[[stocks]]),])
      print(stocks)

问题是,当我尝试查看列表中的xts对象时,我得到了:

Error in names[[i]] : subscript out of bounds

奇怪的是,我仍然可以从控制台访问数据,例如print(stockxts [[“ A”]])。

非常感谢您的帮助,我是R新手! 谢谢!

1 个答案:

答案 0 :(得分:1)

有两种创建xts对象的方法,一种是通过创建row.names来创建,第二种是使用 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_CAMERA) { //Bundle bundle = data.getExtras(); // final Bitmap bmp = (Bitmap) data.getExtras().get("data"); //imageView.setImageBitmap(bmp); Glide.with(this).load(imageFilePath).into(imageView); //imageBitmap = bmp; globalPost = imageFilePath; share.setVisibility(View.VISIBLE); } else if (requestCode == REQUEST_GALLERY) { Uri selectedImageUri = data.getData(); imageView.setImageURI(selectedImageUri); try { String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getActivity().getContentResolver().query(selectedImageUri, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); globalPost = picturePath; cursor.close(); share.setVisibility(View.VISIBLE); } catch (Exception e) { e.printStackTrace(); } } } } private String imageToString(Bitmap imageBitmap) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); imageBitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream); byte[] imgByte = byteArrayOutputStream.toByteArray(); return Base64.encodeToString(imgByte,Base64.DEFAULT); } 函数中的order.by选项。

但是您应该意识到您没有从数据中删除日期列。 xts数据是一个矩阵,如果包含日期,则矩阵中的所有内容都是字符。

在行名声明之后,您可以执行以下操作删除日期:

as.xts

,然后 stockdfs[[stocks]]$Date <- NULL 将具有数字形式的xts数据(只要其他列中没有其他字符值)。

在以下示例中,删除日期或保留日期后,您可以看到结果的差异:

stockxts[[stocks]] = as.xts(stockdfs[[stocks]])