将单列 Dataframe 转换为 XTS 会丢失列名
Converting a single column Dataframe to XTS is losing column name
我有一种情况需要将数据框对象转换为 XTS 对象。我的数据框的第一列始终是一个日期对象,并且始终被命名为“日期”。但是,我不知道我的数据框对象是否有 1 列(不包括日期)或更多列。
问题是这样的:当我尝试使用 xts() 将数据框对象转换为 xts 时,当数据框对象有超过 1 列时,生成的 XTS 对象具有正确的列名。但是如果它只有一个数据列(不包括日期),它会丢失其列名。请参阅下面的代码。
dv <- as.Date(c("2010-01-31", "2010-02-28", "2010-03-31"))
DF <- data.frame(Date = dv, C1 = c(1,2,3), C2 = c(10,20,30))
DF.subset <- data.frame(Date = dv, C1 = c(1,2,3))
DF.TS <- xts(DF[,-1], order.by =dv)
DF.subset.TS <- as.xts(DF.subset[,-1], order.by =dv)
> head(DF.TS)
C1 C2
2010-01-31 1 10
2010-02-28 2 20
2010-03-31 3 30
> head(DF.subset.TS)
[,1]
2010-01-31 1
2010-02-28 2
2010-03-31 3
> colnames(DF.TS)
[1] "C1" "C2"
> colnames(DF.subset.TS)
NULL
为什么我在第二次 (DF.subset.TS) 中丢失了列名(以及如何避免丢失)?
非常感谢任何帮助。
当数据中只有一列时,默认性质是删除它的维度并将其转换为向量。
DF.subset[,-1]
#[1] 1 2 3
为避免这种情况并将数据框保持为数据框,您可以使用 drop = FALSE
。
DF.subset[,-1, drop = FALSE]
# C1
#1 1
#2 2
#3 3
现在在 xts
函数中使用它。
library(xts)
DF.TS <- xts(DF[,-1, drop = FALSE], order.by =dv)
DF.subset.TS <- as.xts(DF.subset[,-1, drop = FALSE], order.by =dv)
colnames(DF.TS)
#[1] "C1" "C2"
colnames(DF.subset.TS)
#[1] "C1"
我有一种情况需要将数据框对象转换为 XTS 对象。我的数据框的第一列始终是一个日期对象,并且始终被命名为“日期”。但是,我不知道我的数据框对象是否有 1 列(不包括日期)或更多列。
问题是这样的:当我尝试使用 xts() 将数据框对象转换为 xts 时,当数据框对象有超过 1 列时,生成的 XTS 对象具有正确的列名。但是如果它只有一个数据列(不包括日期),它会丢失其列名。请参阅下面的代码。
dv <- as.Date(c("2010-01-31", "2010-02-28", "2010-03-31"))
DF <- data.frame(Date = dv, C1 = c(1,2,3), C2 = c(10,20,30))
DF.subset <- data.frame(Date = dv, C1 = c(1,2,3))
DF.TS <- xts(DF[,-1], order.by =dv)
DF.subset.TS <- as.xts(DF.subset[,-1], order.by =dv)
> head(DF.TS)
C1 C2
2010-01-31 1 10
2010-02-28 2 20
2010-03-31 3 30
> head(DF.subset.TS)
[,1]
2010-01-31 1
2010-02-28 2
2010-03-31 3
> colnames(DF.TS)
[1] "C1" "C2"
> colnames(DF.subset.TS)
NULL
为什么我在第二次 (DF.subset.TS) 中丢失了列名(以及如何避免丢失)? 非常感谢任何帮助。
当数据中只有一列时,默认性质是删除它的维度并将其转换为向量。
DF.subset[,-1]
#[1] 1 2 3
为避免这种情况并将数据框保持为数据框,您可以使用 drop = FALSE
。
DF.subset[,-1, drop = FALSE]
# C1
#1 1
#2 2
#3 3
现在在 xts
函数中使用它。
library(xts)
DF.TS <- xts(DF[,-1, drop = FALSE], order.by =dv)
DF.subset.TS <- as.xts(DF.subset[,-1, drop = FALSE], order.by =dv)
colnames(DF.TS)
#[1] "C1" "C2"
colnames(DF.subset.TS)
#[1] "C1"