Извлечение итерационной строки и присвоение их столбцам - PullRequest
0 голосов
/ 27 июня 2018

В наборе данных у меня только один столбец, который неопрятен, а в Column1 столько строк, которые снова начинаются с даты. Пример выглядит следующим образом:

Column1
date: 28-Oct-2017
company: BB KISS
classification: Software
roundsize: 1.2
cumulative: 1.2
round: Seed
investors: Private
headquartered: Darmstadt
country: Germany
region: DACH
description: Software development for crypto currency and blockchain 
url: https://bbkiss.de/

Извлечь после ":"

df$extract <- sub('.*:', '', df$Column1)

Я хочу назначить дату, компанию, классификацию и другие данные для новых столбцов. Как ниже:

date          company  classification  roundsize  cumulative  round ...
28-Oct-2017   BB KISS  Software        1.2        1.2         Seed  ...

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я создал пример набора данных с 2 (теми же) компаниями. Вы можете использовать tidyr и dplyr, чтобы все заработало. Вам нужно создать идентификатор, чтобы убедиться, что спред работает.

library(tidyr)
library(dplyr)

df_new <- df1 %>% 
  separate(Column1, into = c("cols", "data"), sep = ": ") %>% 
  group_by(cols) %>%
  mutate(id = row_number()) %>% # create id per company
  spread(cols, data)

df_new
# A tibble: 2 x 13
     id classification company country cumulative date        description           headquartered investors region round roundsize url    
  <int> <chr>          <chr>   <chr>   <chr>      <chr>       <chr>                 <chr>         <chr>     <chr>  <chr> <chr>     <chr>  
1     1 Software       BB KISS Germany 1.2        28-Oct-2017 "Software developmen~ Darmstadt     Private   DACH   Seed  1.2       https:~
2     2 Software       BB KISS Germany 1.2        28-Oct-2017 "Software developmen~ Darmstadt     Private   DACH   Seed  1.2       https:~

данные:

df1 <-  dput(df1)
structure(list(Column1 = c("date: 28-Oct-2017", "company: BB KISS", 
"classification: Software", "roundsize: 1.2", "cumulative: 1.2", 
"round: Seed", "investors: Private", "headquartered: Darmstadt", 
"country: Germany", "region: DACH", "description: Software development for crypto currency and blockchain ", 
"url: https://bbkiss.de/", "date: 28-Oct-2017", "company: BB KISS", 
"classification: Software", "roundsize: 1.2", "cumulative: 1.2", 
"round: Seed", "investors: Private", "headquartered: Darmstadt", 
"country: Germany", "region: DACH", "description: Software development for crypto currency and blockchain ", 
"url: https://bbkiss.de/")), class = "data.frame", row.names = c(NA, 
-24L))
0 голосов
/ 27 июня 2018

Вы можете сделать это с отделением от {tidyr}:

tab <- tibble::tribble(
  ~ column1, 
  "date: 28-Oct-2017",
  "company: BB KISS",
  "classification: Software",
  "roundsize: 1.2",
  "cumulative: 1.2"
)
library(tidyr)
tab %>% 
  separate(column1, into = c("A", "B"), sep = ": ") %>%
  spread(key = A, value = B)
#> # A tibble: 1 x 5
#>   classification company cumulative date        roundsize
#>   <chr>          <chr>   <chr>      <chr>       <chr>    
#> 1 Software       BB KISS 1.2        28-Oct-2017 1.2
...