R:为什么类 Date 在子集化时丢失

标签 r

这是一个简单的例子。我有一个数据框,其中包含三个日期:

Data <- as.data.frame(as.Date(c('1970/01/01', '1970/01/02', '1970/01/03')))
names(Data) <- "date"

现在我添加一列包含相同的条目:

for(i in 1:3){
  Data[i, "date2"] <- Data[i, "date"]
}

输出如下:

        date date2
1 1970-01-01     0
2 1970-01-02     1
3 1970-01-03     2

出于未知原因,列 date2 的类是数字,而不是日期类。奇怪的是,如果您明确告诉 R 使用日期格式:

for(i in 1:3){
  Data[i, "date3"] <- as.Date(Data[i, "date"])
}

这没有任何区别。

        date date2 date3
1 1970-01-01     0     0
2 1970-01-02     1     1
3 1970-01-03     2     2

问题似乎在于使用子集 [],在更有趣的示例中,您有两列日期,并且想要创建第三列,根据某些因素从其他两列之一中选择日期同样的情况也会发生。

当然,我们可以通过执行以下操作来修复所有问题:

Data$date4 <- as.Date(Data$date2, origin = "1970-01-01")

但我仍然想知道:为什么?为什么会发生这种情况?为什么我的日期在转移到另一列时不能只保留日期?

最佳答案

这不是最终的解决方案,但我认为这可以帮助理解。

这是您的数据:

Data <- data.frame(date = 
                  as.Date(c('2000/01/01', '2012/01/02', '2013/01/03')))

采用这 2 个向量,其中一个默认输入为数字,第二个输入为日期。

vv <- vector("numeric",3)
vv.Date <- vector("numeric",3)
class(vv.Date) <- 'Date'
vv
[1] 0 0 0
> vv.Date
[1] "1970-01-01" "1970-01-01" "1970-01-01" ## type dates is initialized by the origin 01-01-1970

现在,如果我尝试像在循环的第一步中那样分配每个向量的第一个元素:

vv[1] <- Data$date[1]
vv.Date[1] <- Data$date[1]
vv
[1] 10957     0     0
> vv.Date
[1] "2000-01-01" "1970-01-01" "1970-01-01"  

如您所见,类型化向量创建得很好。会发生什么,当您通过标量值分配向量时,R 会在内部尝试将其转换为向量的类型。返回到您的示例,当您执行此操作时:

您创建一个数字向量 (vv),并尝试为其分配日期:

for(i in 1:3){
  Data[i, "date3"] <- as.Date(Data[i, "date"])
}

如果您输入 date3 ,例如:

Data$date3 <- vv.Date

然后你再试一次

for(i in 1:3){
  Data[i, "date3"] <- as.Date(Data[i, "date"])
}

你会得到一个好的结果:

       date      date3
1 2000-01-01 2000-01-01
2 2012-01-02 2012-01-02
3 2013-01-03 2013-01-03

关于R:为什么类 Date 在子集化时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407365/

相关文章:

r - 将具有纪元时间戳的数据帧转换为 R 中以毫秒为单位的时间序列

r - 在 R 中找不到示例文件

r - 使用 R (dplyr) 将三分位数转换为二进制

r - 将 Forecast.gts(hts 包)与外部回归器和并行处理结合使用

R:geom_point() 使用函数来选择形状?

macos - OS X Mountain Lion 升级后 Vim R 插件损坏

r - excel函数“搜索R中的决策函数,但针对两个或多个未知数

r - 示例在 SparkR session 中不起作用

r - 比较两个数据框中的数据并隔离结果

r - 针对另一个分类变量绘制分类变量