我正在尝试将字符串转换为数据框,然后我可以使用它来绘制图形(通过ggplot2
)。我的数据看起来像这样:
Erwerbstätige,死于Zeitdruck和Arbeitsüberlastungleiden2013 nach Berufsgruppen% Führungskräfte26,2 Techniker und gleichrangige nichttechnische Berufe 19,6 Akademische Berufe 18,3 Anlagen- und Maschinenbediener / -innen 15,4 Bürokräfte,kaufmännischeAngestellte13,4 Handwerks- und verwandte Berufe 12,9 Dienstleistungsberufe,Verkäufer/ -innen 11,5 Insgesamt 15,3 Hilfsarbeitskräfte7,3
现在的目标是创建一个包含两列的数据框。一个用于文本,一个用于序列号。重要的是,第一行不是数据的一部分,而是数据集的描述。
任何帮助都将不胜感激。
答案 0 :(得分:0)
library(stringr)
# Define the string
long.string <- "Erwerbstätige, die unter Zeitdruck und Arbeitsüberlastung leiden 2013 nach Berufsgruppen in % Führungskräfte 26,2 Techniker und gleichrangige nichttechnische Berufe 19,6 Akademische Berufe 18,3 Anlagen- und Maschinenbediener/-innen 15,4 Bürokräfte, kaufmännische Angestellte 13,4 Handwerks- und verwandte Berufe 12,9 Dienstleistungsberufe, Verkäufer/-innen 11,5 Insgesamt 15,3 Hilfsarbeitskräfte 7,3"
# Separate the header from the data
# (here I assume that "%" is the last symbol for the header )
percent.loc <- regexpr("%",long.string)
header <- substring(long.string, 1, percent.loc)
data.string <- substring(long.string, percent.loc+1, nchar(long.string))
# Extract all numbers
all.numbers <- str_extract_all (string = data.string,
pattern = "([0-9]+)\\,([0-9])")[[1]]
# replace numbers with semicolon so it would be easier to separate the words later
# here I assume ";" is not used in the string.
# If it is - some other character can be used for this purpose
all.words <- str_replace_all(string = data.string,
pattern = "([0-9]+)\\,([0-9])",
replacement = ";")
# split the string on semicolon
all.words <- str_split( string = all.words, pattern = ";")[[1]]
# trim spaces at the beginning and the end of the string
all.words <- trimws(all.words)
# remove elements without any letters (the last element that originally had only spaces
all.words <- all.words[nchar(all.words) > 0]
# Construct Final Data frame
result <- data.frame( Berufsgruppen = all.words,
Percent = all.numbers,
stringsAsFactors=FALSE)
result
# Berufsgruppen Percent
# 1 Führungskräfte 26,2
# 2 Techniker und gleichrangige nichttechnische Berufe 19,6
# 3 Akademische Berufe 18,3
# 4 Anlagen- und Maschinenbediener/-innen 15,4
# 5 Bürokräfte, kaufmännische Angestellte 13,4
# 6 Handwerks- und verwandte Berufe 12,9
# 7 Dienstleistungsberufe, Verkäufer/-innen 11,5
# 8 Insgesamt 15,3
# 9 Hilfsarbeitskräfte 7,3
答案 1 :(得分:0)
另一种方法可能是
library(dplyr)
df <- data.frame(text_col = strsplit(regmatches(txt, gregexpr('(%|\\d+,\\d+).*\\d+,\\d+', txt))[[1]],
split="\\d+,\\d+")[[1]],
num_col = regmatches(txt, gregexpr('\\d+,\\d+', txt))[[1]]) %>%
`colnames<-`(c(gsub("(^.*%).*", "\\1", txt), "Percentage"))
df
输出为:
Erwerbstätige, die unter Zeitdruck und Arbeitsüberlastung leiden 2013 nach Berufsgruppen in % Percentage
1 % Führungskräfte 26,2
2 Techniker und gleichrangige nichttechnische Berufe 19,6
3 Akademische Berufe 18,3
4 Anlagen- und Maschinenbediener/-innen 15,4
5 Bürokräfte, kaufmännische Angestellte 13,4
6 Handwerks- und verwandte Berufe 12,9
7 Dienstleistungsberufe, Verkäufer/-innen 11,5
8 Insgesamt 15,3
9 Hilfsarbeitskräfte 7,3
示例数据:
txt <- 'Erwerbstätige, die unter Zeitdruck und Arbeitsüberlastung leiden 2013 nach Berufsgruppen in % Führungskräfte 26,2 Techniker und gleichrangige nichttechnische Berufe 19,6 Akademische Berufe 18,3 Anlagen- und Maschinenbediener/-innen 15,4 Bürokräfte, kaufmännische Angestellte 13,4 Handwerks- und verwandte Berufe 12,9 Dienstleistungsberufe, Verkäufer/-innen 11,5 Insgesamt 15,3 Hilfsarbeitskräfte 7,3'