更新
我在網上抓取了一張實際上并不是表格結構的表格。我設法將字符分成多行,但為了將來參考,想知道一種更有效的方法來處理更大的資料集。
我也能夠將所有內容放在一列中,但整個代碼效率極低。有什么改進的建議嗎?
library(rvest)
library(tidyverse)
library(dplyr)
url = "https://www.ncsl.org/research/health/state-laws-and-legislation-related-to-biologic-medications-and-substitution-of-biosimilars.aspx"
webpage=read_html(url)
mandatory_2014 = webpage %>%
html_element(css = "#dnn_ctr84472_HtmlModule_lblContent > div > table:nth-child(15)") %>%
html_table()
mandatory_2014 = data.frame(mandatory_2014)
df = mandatory_2014 %>%
mutate(X1=strsplit(X1, "\n\n\t\t\t")) %>%
unnest(X1) %>%
mutate(X2=strsplit(X2, "\n\n\t\t\t")) %>%
unnest(X3)%>%
mutate(X3=strsplit(X3, "\n\n\t\t\t")) %>%
unnest(X3)
df = df[-c(2)]
df = stack(df)
df = df[-c(2)]
df = data.frame(df[!duplicated(df),])
df = rename(df, States = df..duplicated.df....)
uj5u.com熱心網友回復:
這可以base R更容易地完成 -unlist列到 a vector,然后將一個或多個出現 ( )替換\n\t為單個,以及洗掉從 開始的字符(,然后使用strsplit或scan將字串拆分為單個元素(使用分隔符,),適用trimws于洗掉任何剩余的前導/滯后空格,并將其轉換為data.frame列
out <- data.frame(States = trimws(scan(text = sub("\\s \\(.*", "",
gsub("(\\n \\t )", ",", mandatory_2014)), what="", sep=",")))
-輸出
> out
States
1 Florida
2 Kansas
3 Kentucky
4 Massachusetts
5 Minnesota
6 Mississippi
7 Nevada
8 New Jersey
9 New York
10 Pennsylvania
11 Puerto Rico
12 Rhode Island
13 Washington
14 West Virginia
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484928.html
上一篇:從資料框中創建命名元組串列
