R:使用 POSIXct 集合分配数据框列
R: Assign data frame column with POSIXct collection
我有一个 posixct 元素的集合(我知道我不能将 POSIXct
对象的集合作为一个向量,这就是我在这个例子中使用 list
的原因) :
input_timestamps <- list(
as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
)
现在我需要将此列表作为一列添加到 data.frame
。
当前解决方案如下:
1.将 POSIXct
对象转换为数字,将列表转换为向量
inputs_timestamps <- unlist(lapply(input_timestamps, as.numeric))
2 - 将此向量添加到 data.frame
作为 POSIXct
对象
inputs_df <- data.frame(timestamp = as.POSIXct(input_timestamps, format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"), input = 1:3)
我相信可以有更好的方法来做到这一点。请分享您的经验!
可以使用 do.call(
c``
将其转换为矢量,而不是两步过程
inputs_df <- data.frame(timestamp = do.call(c, input_timestamps),
input = seq_along(input_timestamps))
或者另一种选择是将 list
更改为命名的 list
和 melt
library(reshape2)
melt(setNames(input_timestamps, seq_along(input_timestamps)))
I know I cannot keep the collection of the POSIXct objects as a
vector, that is why I used list in this example
我不相信这是真的,请看以下内容:
> input_timestamps <- c('02.08.2018', '04.08.2018', '14.08.2018')
> inputs_df <- data.frame(timestamp = as.POSIXct(input_timestamps, format = "%d.%m.%Y", tz = "UTC"), input = 1:3)
> class(inputs_df$timestamp)
[1] "POSIXct" "POSIXt"
> inputs_df
timestamp input
1 2018-08-02 1
2 2018-08-04 2
3 2018-08-14 3
> input_timestamps <- as.POSIXct(c('02.08.2018', '04.08.2018', '14.08.2018'), format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
> inputs_df <- data.frame(timestamp = input_timestamps, input = 1:3)
> class(inputs_df$timestamp)
[1] "POSIXct" "POSIXt"
> inputs_df
timestamp input
1 2018-08-02 1
2 2018-08-04 2
3 2018-08-14 3
在任何一种情况下,您都可以使用向量简单地创建一个 data.frame,而无需在它们之间进行不必要的转换。
更新
如果您已经将它们存储为单独的对象,则可以执行以下操作。
input_timestamp1 <- as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamp2 <- as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamp3 <- as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamps <- c(input_timestamp1, input_timestamp2, input_timestamp3)
或
input_timestamps <- c(
as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
)
我有一个 posixct 元素的集合(我知道我不能将 POSIXct
对象的集合作为一个向量,这就是我在这个例子中使用 list
的原因) :
input_timestamps <- list(
as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
)
现在我需要将此列表作为一列添加到 data.frame
。
当前解决方案如下:
1.将 POSIXct
对象转换为数字,将列表转换为向量
inputs_timestamps <- unlist(lapply(input_timestamps, as.numeric))
2 - 将此向量添加到 data.frame
作为 POSIXct
对象
inputs_df <- data.frame(timestamp = as.POSIXct(input_timestamps, format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"), input = 1:3)
我相信可以有更好的方法来做到这一点。请分享您的经验!
可以使用 do.call(
c``
inputs_df <- data.frame(timestamp = do.call(c, input_timestamps),
input = seq_along(input_timestamps))
或者另一种选择是将 list
更改为命名的 list
和 melt
library(reshape2)
melt(setNames(input_timestamps, seq_along(input_timestamps)))
I know I cannot keep the collection of the POSIXct objects as a vector, that is why I used list in this example
我不相信这是真的,请看以下内容:
> input_timestamps <- c('02.08.2018', '04.08.2018', '14.08.2018')
> inputs_df <- data.frame(timestamp = as.POSIXct(input_timestamps, format = "%d.%m.%Y", tz = "UTC"), input = 1:3)
> class(inputs_df$timestamp)
[1] "POSIXct" "POSIXt"
> inputs_df
timestamp input
1 2018-08-02 1
2 2018-08-04 2
3 2018-08-14 3
> input_timestamps <- as.POSIXct(c('02.08.2018', '04.08.2018', '14.08.2018'), format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
> inputs_df <- data.frame(timestamp = input_timestamps, input = 1:3)
> class(inputs_df$timestamp)
[1] "POSIXct" "POSIXt"
> inputs_df
timestamp input
1 2018-08-02 1
2 2018-08-04 2
3 2018-08-14 3
在任何一种情况下,您都可以使用向量简单地创建一个 data.frame,而无需在它们之间进行不必要的转换。
更新
如果您已经将它们存储为单独的对象,则可以执行以下操作。
input_timestamp1 <- as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamp2 <- as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamp3 <- as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
input_timestamps <- c(input_timestamp1, input_timestamp2, input_timestamp3)
或
input_timestamps <- c(
as.POSIXct("02.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("04.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC"),
as.POSIXct("14.08.2018", format = "%d.%m.%Y", origin = "01.01.1970", tz = "UTC")
)