Как очистить данные, где имя переменной и свойство находятся в одной ячейке? - PullRequest
0 голосов
/ 28 ноября 2018

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

Я приложил пример:

enter image description here

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

Как мне сделать это на R?Какие функции я должен использовать

Пример данных:

Example1    Sunny:"TRUE"    NearCoast:False Schools:{"13"} 2
Example2    NearCoast:False Schools:{"6"}   Sunny:"FALSE" 3
Example3    Schools:{"2"}   Sunny:"TRUE"    NearCoast:TRUE Transport:5

Кроме того, было бы возможно, чтобы я мог добавить исключения к этому процессу.Например, если ячейка представляет собой просто число, она игнорируется.Или, если имя свойства является определенной вещью, такой как «транспорт», оно также игнорирует ячейку.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Попробуйте этот пример, как упоминалось в комментариях, мы можем изменить форму от широкой к длинной, затем разделить строку на :, а затем снова изменить форму от длинной к широкой.

df1 <- read.table(text = '
Example1    Sunny:"TRUE"    NearCoast:False Schools:{"13"} 2
Example2    NearCoast:False Schools:{"6"}   Sunny:"FALSE" 3
Example3    Schools:{"2"}   Sunny:"TRUE"    NearCoast:TRUE Transport:5',
                  header = FALSE, stringsAsFactors = FALSE)


library(tidyverse)

gather(df1, key = "k", value = "v", -V1) %>% 
  separate(v, into = c("type", "value"), sep = ":") %>% 
  filter(!is.na(value)) %>% 
  select(-k) %>% 
  spread(key = type, value = value)

#         V1 NearCoast Schools   Sunny Transport
# 1 Example1     False  {"13"}  "TRUE"      <NA>
# 2 Example2     False   {"6"} "FALSE"      <NA>
# 3 Example3      TRUE   {"2"}  "TRUE"         5
0 голосов
/ 28 ноября 2018

В отсутствие воспроизводимого примера я могу предоставить только рекомендации.Предполагая, что вы можете читать данные в табличном виде, как показано на втором изображении, вы можете сделать это с помощью 4 «простых» шагов с пакетами dplyr и tidyr:

library(dplyr)
library(tidyr)

df <- read.table(...)

df %>% gather(keypair, column, 2:4) %>%
  separate(keypair, into=c('key','value'), sep=':') %>%
  mutate(value=gsub('"{}', '', value)) %>%
  spread(key, value)

Пройдите через каждую строку, строкупострочно, и попытайтесь понять, что происходит, прежде чем пытаться запустить следующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...