我有一个包含三个xts的列表,其中包含一列。
:'xts' : 250 obs. of 1 variable:
:'xts' : 245 obs. of 1 variable:
:'xts' : 250 obs. of 1 variable:
XTS第二个数值最小。
如何平衡此列表中的变量数量? (值得记住的是,XTS有一个变量作为时间。)
下面是我将如何做的一个例子:
index time xts1 xts2 xts3
1 2016-10-27 10 34 7
2 2016-10-26 41 16
3 2016-10-25 19 60 25
4 2016-10-24 50 92
5 2016-10-23 34 75 6
如果某些值不存在,只需删除缺少值的行。 也就是说,将2行和4行删除到列表中。
答案 0 :(得分:3)
开始使用NA
来表示缺失值而不是空格是值得的。出于数据结构的目的,进行此调整很重要。许多R对象必须是一种类型。插入空格会导致矩阵和向量被强制转换为"character"
类型。如果将使用需要numeric
元素的函数,则这不是期望的行为。
您可以像对待矩阵那样对xts
对象进行子集化:
#Example
mat
Open High Low Close
2007-01-02 50.03978 50.11778 49.95041 50.11778
2007-01-03 50.23050 NA 50.23050 50.39767
2007-01-04 50.42096 50.42096 50.26414 50.33236
2007-01-05 50.37347 NA 50.22103 50.33459
2007-01-06 50.24433 50.24433 50.11121 50.18112
2007-01-07 50.13211 50.21561 49.99185 49.99185
2007-01-08 50.03555 NA 49.96971 49.98806
2007-01-09 49.99489 49.99489 49.80454 49.91333
我们可以按照惯例进行分组:
mat2 <- mat[!is.na( mat[,2] ),]
答案 1 :(得分:1)
假设您的数据位于数据框中,您可以执行以下操作:
from numpy import *
import cPickle
import scipy.io as io
from random import randrange
y = [len(v) for v in batch_1.values()]
Y = zeros([len(batch_1['data'][:]),3072])
for i in range(len(batch_1['data'][:])): #len() =10000
image = batch_1['data'][i]
image.shape = (3, 32, 32)
image_result = copy(image.transpose((1, 2, 0)))
image_result = reshape(image_result, (1, 3072))
Y[i] = image_result
结果:
df[rowSums(df[,3:5] == '') == 0,]
如果缺失值由 index time xts1 xts2 xts3
1 1 2016-10-27 10 34 7
3 3 2016-10-25 19 60 25
5 5 2016-10-23 34 75 6
s表示,则应将其更改为:
NA
使用df[rowSums(is.na(df[,3:5])) == 0,]
的优点是您可以检查多列中的缺失值。
正如@aichao所指出的,当你有单独的rowSums
个对象时,你可以将xts
和merge
结合使用。但是,我会使用all = FALSE
和Reduce
(source)的组合:
merge
结果:
xts.c <- Reduce(function(...) merge(..., all = FALSE), list(xts1,xts2,xts3))
names(xts.c) <- c('xts1','xts2','xts3')
答案 2 :(得分:1)
由于您的xts对象已在列表中,因此最简单的方法是使用do.call
与您的列表调用merge
。 do.call
允许您将对象列表传递给merge
,而不必手动输入所有名称。
library(xts)
# example data
dates <- seq(as.Date("2016-10-23"), as.Date("2016-10-27"), by = "day")
xtslist <- list(
xts1 = xts(c(34, 50, 19, 41, 10), dates),
xts2 = xts(c(75, 60, 34), dates[c(1, 3, 5)]),
xts3 = xts(c(6, 92, 25, 16, 7), dates))
# merge all list elements into a single xts object
# Note: do.call(merge, xtslist) is equivalent to
# merge(xtslist[[1]], xtslist[[2]], xtslist[[3]])
(myxts <- do.call(merge, xtslist))
# xts1 xts2 xts3
# 2016-10-23 34 75 6
# 2016-10-24 50 NA 92
# 2016-10-25 19 60 25
# 2016-10-26 41 NA 16
# 2016-10-27 10 34 7
如果要省略NA
行,可以调用na.omit(myxts)
,也可以使用all = FALSE
参数merge.xts
。以下是在all = FALSE
命令中指定do.call
的方法。
(myxts2 <- do.call(merge, c(xtslist, all = FALSE)))
# xts1 xts2 xts3
# 2016-10-23 34 75 6
# 2016-10-25 19 60 25
# 2016-10-27 10 34 7