簡體   English   中英

在r中將字符列分成行並將多列合並為一列的最有效方法

[英]Most efficient way to separate character columns into rows and combine multiple columns into one column in r

更新

我在網上抓取了一張實際上並不是表格結構的表格。 我設法將字符分成多行,但為了將來參考,想知道一種更有效的方法來處理更大的數據集。

我也能夠將所有內容放在一列中,但整個代碼效率極低。 有什么改進的建議嗎?

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....)

這可以在base R中更輕松地完成 - 將列unlist列出為vector ,然后將\n\t的一個或多個出現 ( + ) 替換為單個,以及刪除從(開始的字符,然后使用strsplitscan將字符串拆分為單個元素(使用分隔符, ),應用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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM