将字符串格式化为可用数据帧

时间:2018-05-07 18:51:19

标签: r

我正在尝试将字符串转换为数据框,然后我可以使用它来绘制图形(通过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

现在的目标是创建一个包含两列的数据框。一个用于文本,一个用于序列号。重要的是,第一行不是数据的一部分,而是数据集的描述。

任何帮助都将不胜感激。

2 个答案:

答案 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'