如何将 str_extract 函数应用于一系列表格单元格?

问题描述 投票:0回答:1

我的最终目标是使用维基百科表中的数据源绘制图表。

我使用 R/selenium。

我已成功修改其中一个单元格:

library(RSelenium)
library(wdman)
library(netstat)

selenium()

selenium_object <- selenium(retcommand = TRUE, check = F)
selenium_object

binman::list_versions("chromedriver")

#start the server
rs_driver_object <- rsDriver(browser = "chrome",
                          chromever = "117.0.5938.92",
                          verbose = F,
                          port = free_port())

#create a client object
remDr <- rs_driver_object$client

#open a browser
remDr$open()

remDr$navigate("https://zh.wikipedia.org/zh-hk/%E6%B2%99%E7%94%B0_(%E9%A6%99%E6%B8%AF)")

webpage_text <- remDr$getPageSource()[[1]]

tables <- getNodeSet(htmlParse(webpage_text),"//table")

df <- readHTMLTable(tables[[3]], Encoding("UTF-8"))

str_extract(df[4,2], "\\d+([.,]\\d+)?+(?<!\\()")

问题是:如何将正则表达式函数应用于一系列表格单元格?那么,如何在同一个df中获得结果呢?

我的尝试是这样的,但失败了:

celsius <- str_extract(df[4,2], "\\d+([.,]\\d+)?+(?<!\\()")

apply(df[c(2:3),c(5:8)], c(1,2), celsius)

难题是如何解决

celsius
中的字符串属性。

谢谢你。

r regex selenium-webdriver apply stringr
1个回答
0
投票

这可以简单一点。您在这里不需要 Selenium,因为它是一个静态网站,因此您可以使用

rvest
来提取表格:

df <- read_html(url) |>
    html_elements(".wikitable") |>
    html_table(header = FALSE) |>
    purrr::pluck(1) |>
    filter(grepl("°C(°F)", X1)) |> # only temperature columns
    # set month names to English for my benefit
    setNames(c("month", month.abb, "annual"))

然后要提取

celsius
温度,您可以使用
tidyr::separate_wider_regex()

df |>
    tidyr::separate_wider_regex(
        cols = Jan:annual, c(c = ".+", f = "\\(.+\\)"),
        names_sep = "_"
    ) |>
    select(month, ends_with("_c"))

# # A tibble: 5 × 14
#   month               Jan_c Feb_c Mar_c Apr_c May_c Jun_c Jul_c Aug_c Sep_c Oct_c Nov_c Dec_c annual_c
#   <chr>               <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 歷史最高溫 °C(°F) 27.6  28.6  31.8  33.0  36.6  36.4  37.5  38.1  36.5  35.1  31.8  28.9  38.1
# 2 平均高溫 °C(°F)   19.3  19.8  22.1  25.7  29.0  30.8  31.9  31.9  31.1  28.5  24.9  20.9  26.3
# 3 日均氣溫 °C(°F)   15.8  16.5  19.1  22.6  26.1  28.1  28.9  28.6  27.8  25.2  21.5  17.2  23.1
# 4 平均低溫 °C(°F)   12.9  13.9  16.7  20.2  23.7  25.8  26.3  26.0  25.2  22.6  18.7  14.1  20.5
# 5 歷史最低溫 °C(°F) 2.9   4.0   4.4   10.2  15.3  19.9  21.3  22.1  19.9  14.4  6.3   4.8   2.9
© www.soinside.com 2019 - 2024. All rights reserved.