R:使用POSIXct集合分配数据框列

时间:2019-01-15 13:15:10

标签: r datetime dataframe posixct

我有个元素的集合(我知道我无法将POSIXct个对象的集合作为向量,这就是为什么在此示例中使用list的原因):< / p>

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)

我相信可能会有更好的方法。请分享您的经验!

2 个答案:

答案 0 :(得分:1)

可以用renderComponent() { switch (this.state.renderView) { case 1: return <Main />; case 2: return <Main2 />; default: return <SelectionPage clickBtn={this.clickBtn} />; } } render() { return this.renderComponent(); } c''代替两步过程将其转换为向量

do.call(

或者另一个选择是将inputs_df <- data.frame(timestamp = do.call(c, input_timestamps), input = seq_along(input_timestamps)) 更改为命名的listlist

melt

答案 1 :(得分:1)

  

我知道我无法将POSIXct对象的集合保留为   向量,这就是我在此示例中使用列表的原因

我不相信这是真的,请采取以下措施:

> 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)

OR

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")
)