将列中的特定值转换为 UNIX 时间戳

Convert Specific values in a column to UNIX timestamp

提问人:Datamaniac 提问时间:5/6/2022 最后编辑:Gregor ThomasDatamaniac 更新时间:5/6/2022 访问量:73

问:

我的数据帧中有一列,它是一些日期和字符串值的混合。我想专门选择日期并转换为 UNIX 时间戳,并保留字符串值。这怎么能实现呢?

示例数据

|column1|
---------
|2020-12-21 00:00:00|
|test1|
|test2|
|test3|
|2021-12-21 00:00:00|

预期结果

|Column1|
---------------
|1608508800|
|test1|
|test2|
|test3|
|1608508800|
r date dplyr 条件语句 数据操作

评论


答:

0赞 Gregor Thomas 5/6/2022 #1
x = read.table(text = 'column1
2020-12-21 00:00:00
test1
test2
test3
2021-12-21 00:00:00', sep = ";", header = T)

uts = as.numeric(as.POSIXct(x$column1, format = "%Y-%m-%d %H:%M:%S", tz = "UTC"))
uts_i = which(!is.na(uts))
x$column1[uts_i] = uts[uts_i]
x
#      column1
# 1 1608508800
# 2      test1
# 3      test2
# 4      test3
# 5 1640044800

或者与:dplyr

x %>%
  mutate(
    uts = as.numeric(as.POSIXct(x$column1, format = "%Y-%m-%d %H:%M:%S", tz = "UTC")),
    column1 = coalesce(as.character(uts), column1)
  ) %>%
  select(-uts)
#      column1
# 1 1608508800
# 2      test1
# 3      test2
# 4      test3
# 5 1640044800

评论

0赞 Datamaniac 5/6/2022
我在 sparkr 数据帧上尝试了 dplyr 方法,但收到错误:没有将此 S4 类强制转换为向量的方法
0赞 Gregor Thomas 5/6/2022
呵呵,我想知道这是什么班级?示例数据中没有 S4 类。