gpt4 book ai didi

r - 临时更改区域设置

转载 作者:行者123 更新时间:2023-12-04 18:40:32 26 4
gpt4 key购买 nike

实际问题

我该怎么办 暂时更改/指定用于某些函数调用的区域设置(例如 strptime() )?

背景

我刚刚运行了以下 rvest 演示:
demo("tripadvisor", package = "rvest")
当涉及到要抓取日期的部分时,我遇到了一些最有可能是由我的语言环境设置引起的问题:日期是美国格式,而我在德国语言环境中:

require("rvest")
url <- "http://www.tripadvisor.com/Hotel_Review-g37209-d1762915-Reviews-JW_Marriott_Indianapolis-Indianapolis_Indiana.html"

reviews <- url %>%
html() %>%
html_nodes("#REVIEWS .innerBubble")

date <- reviews %>%
html_node(".rating .ratingDate") %>%
html_attr("title")
> date
[1] "December 9, 2014" "December 9, 2014" "December 8, 2014" "December 8, 2014"
[5] "December 6, 2014" "December 5, 2014" "December 5, 2014" "December 3, 2014"
[9] "December 3, 2014" "December 3, 2014"

基于此输出,我将使用以下格式: %B %e, %Y (或 %B%e, %Y 取决于“带一位数的前导空格”实际上意味着前导空格的 WRT;参见 ?strptime )。

然而,两者都失败了:
strptime(date, "%B %e, %Y")
strptime(date, "%B%e, %Y")

我想这是因为 %B期望月份名称为德语而不是英语:

Full month name in the current locale. (Also matches abbreviated name on input.)



编辑
Sys.setlocale()让我们更改您的区域设置。但是,在调用依赖于语言环境设置的函数之后,似乎不可能这样做。即,您需要从新的 R session 开始,以使区域设置更改生效。这使得 临时改动有点麻烦。任何想法如何解决这个问题?

这是我的语言环境:
> Sys.getlocale(category = "LC_ALL")
[1] "LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252"

当我改变它时 之前 运行 strptime()第一次,一切正常:
Sys.setlocale(category = "LC_ALL", locale = "us")
> strptime(date, "%B %e, %Y")
[1] "2014-12-09 CET" "2014-12-09 CET" "2014-12-08 CET" "2014-12-08 CET" "2014-12-06 CET"
[6] "2014-12-05 CET" "2014-12-05 CET" "2014-12-03 CET" "2014-12-03 CET" "2014-12-03 CET"

但是,如果我更改它 已运行 stptime() ,变化似乎没有被识别
> Sys.setlocale(category = "LC_ALL", locale = "German")
[1] "LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252"
> strptime(date, "%B %e, %Y")
[1] "2014-12-09 CET" "2014-12-09 CET" "2014-12-08 CET" "2014-12-08 CET" "2014-12-06 CET"
[6] "2014-12-05 CET" "2014-12-05 CET" "2014-12-03 CET" "2014-12-03 CET" "2014-12-03 CET"

这实际上应该导致 NA 的向量s 如果已更改回德国语言环境。

最佳答案

parse_date_time()来自 lubridate 包就是你要找的。它有一个明确的 locale根据特定语言环境解析字符串的选项。

parse_date_time(date, orders = "B d, Y", locale = "us")

给你:
[1] "2016-02-26 UTC" "2016-02-26 UTC" "2016-02-26 UTC" "2016-02-24 UTC" "2016-02-23 UTC" "2016-02-21 UTC"
[7] "2016-02-21 UTC" "2016-02-21 UTC" "2016-02-20 UTC" "2016-02-20 UTC"

请注意,您给出的解析格式没有前导 %正如您在 strptime() 中所做的那样.

关于r - 临时更改区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27398863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com