【问题标题】:applying strptime to local data frame将 strptime 应用于本地数据帧
【发布时间】:2016-04-04 06:28:37
【问题描述】:

我想我有一个与\ 相关的问题,我无法处理。

这是我用 read_csv 阅读的 data.frame 的 DateTime 列的摘录:

earthquakes[1:20,1]
Source: local data frame [20 x 1]
                 DateTime
                    (chr)
1  1964/01/01 12:21:55.40
2  1964/01/01 14:16:27.60
3  1964/01/01 14:18:53.90
4  1964/01/01 15:49:47.90
5  1964/01/01 17:26:43.50

我的目标是提取这里的年份。手动操作

> format(strptime(c("1964/01/01 12:21:55.40","1964/01/01 12:21:55.40","1964/01/01 14:16:27.60"), "%Y/%m/%d %H:%M:%OS"), "%Y")
[1] "1964" "1964" "1964"

按预期工作。不过,

> strptime(earthquakes[1:5,1], "%Y/%m/%d %H:%M:%OS")
DateTime 
      NA 

我的直觉是问题与

有关
as.character(earthquakes[1:5,1])
[1] "c(\"1964/01/01 12:21:55.40\", \"1964/01/01 14:16:27.60\", \"1964/01/01 14:18:53.90\", \"1964/01/01 15:49:47.90\", \"1964/01/01 17:26:43.50\")"

因此,数据框中的列也包含“通过转义\"。但我不知道如何从这里处理。

鉴于年份是前四个条目,这样做似乎也可以(但不太优雅,恕我直言)

substr(earthquakes[1:5,1],1,4)

但是相应地只是给出了

[1] "c(\"1"

显然,我可以做到

substr(earthquakes[1:5,1],4,7)

但这仅适用于第一行。

【问题讨论】:

    标签: r string date escaping


    【解决方案1】:

    显然你有一个 dplyr::tbl_df 并且默认情况下,[ 永远不会将单个列简化为原子向量(与应用于基本 R data.frame[ 形成对比)。因此,您可以使用[[$ 来提取列,然后将其简化为原子向量。

    一些例子:

    data(iris)
    library(dplyr)
    x <- tbl_df(iris)
    x[1:5, 1]
    #Source: local data frame [5 x 1]
    #
    #  Sepal.Length
    #         (dbl)
    #1          5.1
    #2          4.9
    #3          4.7
    #4          4.6
    #5          5.0
    iris[1:5, 1]
    #[1] 5.1 4.9 4.7 4.6 5.0
    x[[1]][1:5]
    #[1] 5.1 4.9 4.7 4.6 5.0
    x$Sepal.Length[1:5]
    #[1] 5.1 4.9 4.7 4.6 5.0
    

    【讨论】:

    • 即使没有我发布 MWE,您如何发现问题也令人惊讶!这解释了为什么它在某个时候起作用但之后不再起作用 - 我只需要在此过程的后期使用dplyr(我太尴尬地发布它,代码似乎不太可能有时应该工作然后不再工作)。跨度>
    • @您可以保持数据不变,只需将strptime(earthquakes[1:5,1], "%Y/%m/%d %H:%M:%OS") 替换为strptime(earthquakes[[1]][1:5], "%Y/%m/%d %H:%M:%OS")
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 2017-05-31
    • 2016-09-08
    • 1970-01-01
    • 2016-12-25
    • 2015-12-15
    • 2015-09-13
    • 2021-02-28
    相关资源
    最近更新 更多