我有一个数据帧列表,我想转换到数据帧的每一列到时间戳
gg=list(a = data.frame(X1 = c(1516087622, 1516087622, 1516087622, 1516087622,
1516087622), X2 = c(1516087622, 1516087622, 1516087622, 1516087622,
1516087622)),b = data.frame(X1 = c(1516078740, 1516078740, 1516078740, 1516078740,
1516078740), X2 = c(1516078740, 1516078740, 1516078740, 1516078740,
1516078740)))
> gg
$a
X1 X2
1 1516087622 1516087622
2 1516087622 1516087622
3 1516087622 1516087622
4 1516087622 1516087622
5 1516087622 1516087622
$b
X1 X2
1 1516078740 1516078740
2 1516078740 1516078740
3 1516078740 1516078740
4 1516078740 1516078740
5 1516078740 1516078740
我正在使用以下功能
Map(as.POSIXct,lapply(gg,function(x) x[[1]]),origin = "1970-01-01")
它转换每个数据帧的第一列,但我想一次转换所有..
我需要基本R功能。
谢谢。
这是tidyverse
的一个选项。我们map
通过list
元素和mutate_all
将所有列更改为POSIXct
类
library(dplyr)
library(purrr)
map(gg, ~ .x %>%
mutate_all(funs(as.POSIXct(., origin = "1970-01-01"))))
#$a
# X1 X2
#1 2018-01-16 12:57:02 2018-01-16 12:57:02
#2 2018-01-16 12:57:02 2018-01-16 12:57:02
#3 2018-01-16 12:57:02 2018-01-16 12:57:02
#4 2018-01-16 12:57:02 2018-01-16 12:57:02
#5 2018-01-16 12:57:02 2018-01-16 12:57:02
#$b
# X1 X2
#1 2018-01-16 10:29:00 2018-01-16 10:29:00
#2 2018-01-16 10:29:00 2018-01-16 10:29:00
#3 2018-01-16 10:29:00 2018-01-16 10:29:00
#4 2018-01-16 10:29:00 2018-01-16 10:29:00
#5 2018-01-16 10:29:00 2018-01-16 10:29:00
相应的base R
选项将使用list
循环遍历Map
元素,然后使用lapply
循环遍历数据集的每一列,并将转换后的值分配给数据集(x[] <-
),返回数据集
Map(function(x) {x[] <- lapply(x, as.POSIXct, origin = "1970-01-01");x }, gg)