在 R 中的 For 循环中转换日期 - 必须提供原点
Converting date in For Loop in R - origin must be supplied
我在 R 中有一个日期序列,对于每个日期,我需要获取年、月和日。我尝试使用 strftime 函数打印出年份,但 R 的行为非常奇怪。此代码失败:
# sequence of dates
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
# this fails with "'origin' must be supplied" error:
for (d in dates) {
year <- strftime(d, "%Y")
print(year)
}
确切的错误信息是:Error in as.POSIXlt.numeric(x, tz = tz) : 'origin' must be supplied
另一方面,这段代码没有任何错误:
# sequence of dates
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
# this works
for (i in 1: length(dates)) {
year <- strftime(dates[i], "%Y")
print(year)
}
为什么第一个示例失败而第二个示例有效?我怀疑在第一个示例中 R 试图将我的日期转换为某种 POSIXct 对象,而在第二个示例中它没有?我很困惑为什么会有任何差异,我很感激对发生的事情的解释。我正在使用 R 版本 3.2.2。
for
正在创建 d
作为数字。这里有两种方法。
删除了下面的注释,仅更改了标记为 ##
的代码行。
1) 列表 使用这样的列表:
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
for (d in as.list(dates)) { ##
year <- strftime(d, "%Y")
print(year)
}
2) as.Date 或将 d
转换回 "Date"
class.
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
for (d in dates) {
year <- strftime(as.Date(d, origin = "1970-01-01"), "%Y") ##
print(year)
}
我在 R 中有一个日期序列,对于每个日期,我需要获取年、月和日。我尝试使用 strftime 函数打印出年份,但 R 的行为非常奇怪。此代码失败:
# sequence of dates
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
# this fails with "'origin' must be supplied" error:
for (d in dates) {
year <- strftime(d, "%Y")
print(year)
}
确切的错误信息是:Error in as.POSIXlt.numeric(x, tz = tz) : 'origin' must be supplied
另一方面,这段代码没有任何错误:
# sequence of dates
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
# this works
for (i in 1: length(dates)) {
year <- strftime(dates[i], "%Y")
print(year)
}
为什么第一个示例失败而第二个示例有效?我怀疑在第一个示例中 R 试图将我的日期转换为某种 POSIXct 对象,而在第二个示例中它没有?我很困惑为什么会有任何差异,我很感激对发生的事情的解释。我正在使用 R 版本 3.2.2。
for
正在创建 d
作为数字。这里有两种方法。
删除了下面的注释,仅更改了标记为 ##
的代码行。
1) 列表 使用这样的列表:
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
for (d in as.list(dates)) { ##
year <- strftime(d, "%Y")
print(year)
}
2) as.Date 或将 d
转换回 "Date"
class.
dates <- seq(as.Date("1987-03-29"), as.Date("1991-12-31"), by=1)
for (d in dates) {
year <- strftime(as.Date(d, origin = "1970-01-01"), "%Y") ##
print(year)
}