我需要从 Google 表格中的超链接(如果适用)读取 URL,以便在我的分析的其他部分中使用。我正在使用
read_sheet()
或 range_read()
读取数据,但这只提供了单元格的值(可见的内容 - 没有公式或网址)。我转向range_read_cells()
并取得了一些成功,但现在我陷入了困境。考虑以下几点:
library(googledrive)
library(googlesheets4)
library(dplyr)
df_test <- read_sheet("https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0")
View(df_test) # no urls - text only
df_test2 <- range_read_cells(ss = "https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0",
sheet = "Sheet1",
range = "A1:C5",
cell_data = "full")
View(df_test2) # urls are in a deep within a list called 'cell'
x <-unlist(df_test2$cell)
x["hyperlink"]
x["hyperlink"]
调用可以让我访问 URL,但只能访问第一个:
> x["hyperlink"]
hyperlink
"https://www.google.com/"
如何将其应用到整张纸上?我需要从工作表中读取每个网址并将其写入一个新列。请注意,并非所有行都有 url,但我假设我可以有条件地处理这种情况。
我在 https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0 分享了包含示例数据的 Google 表格。它是公开的,所以你应该能够看到它。
提前致谢!
我今天正试图解决这个问题。我编写了以下函数,它可以与
purrr::map_df
结合使用来完成您想要做的事情:
library(googlesheets4)
library(dplyr)
library(purrr)
library(stringr)
extract_hyperlink_data <- function(cell) {
cell_unlisted <- unlist(cell)
list(
text = cell_unlisted[["formattedValue"]],
hyperlink = if ("hyperlink" %in% names(cell_unlisted)) cell_unlisted[["hyperlink"]] else NA
)
}
df_test <- read_sheet("https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0")
df_test2 <- range_read_cells(ss = "https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0",
sheet = "Sheet1",
range = "A1:C5",
cell_data = "full")
URL_data <- df_test2 %>%
filter(stringr::str_starts(loc, "C") & loc != "C1") %>%
pull(cell) %>%
purrr::map_df(., extract_hyperlink_data) %>%
rename(Website = text, Website_URL = hyperlink)
df_test %>%
left_join(URL_data) %>%
View
希望这有帮助 - 如果您需要排除故障,请告诉我。您可能可以构建一个自定义解析器来与此结合使用,这样您就不需要在开始之前知道哪些列具有超链接,但我还没有这样做。