Форматирование строки в пригодный для использования фрейм данных - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь преобразовать строку во фрейм данных, который затем можно использовать для построения графика с помощью (через ggplot2). Мои данные выглядят примерно так:

Erwerbstätige, die unter Zeitdruck und Arbeitsüberlastung leiden 2013 нач Беруфсгруппен в% Führungskräfte 26,2 Techniker und gleichrangige nichttechnische Berufe 19,6 Академише Беруфе 18,3 Anlagen- und Maschinenbediener / -innen 15,4 Bürokräfte, kaufmännische Angestellte 13,4 Handwerks- и verwandte Berufe 12,9 Dienstleistungsberufe, Verkäufer / -innen 11,5 Insgesamt 15,3 Hilfsarbeitskräfte 7,3

Цель сейчас - создать фрейм данных с двумя столбцами. Один для текста и один для исходящего номера. Важно отметить, что первая строка - это не часть данных, а описание набора данных.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Другой подход может быть

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'
0 голосов
/ 08 мая 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...