разделить столбец данных, содержащий строку значений, разделенных запятыми, на несколько столбцов - PullRequest
0 голосов
/ 22 июня 2019

У меня есть столбец данных, который выглядит примерно так:

ColA
""
"1"
"1,9"
"9,19"
"1,9,19"

В кадре данных есть сотни строк, и числа 1-30 могут появляться в разделенных запятыми списках.Я хотел бы разделить эти значения на их собственные столбцы и указать, присутствовало ли число с логическим значением.

colA_1  colA_9  colA_19

1       0       0                    
1       1       0
0       1       1
1       1       1

Я знаю, например, использование grepl("[1][9]",df$ColA) будет захватывать нужные строки, и тогда я могуиспользуйте это, чтобы создать новый столбец для числа 19, но я не могу понять, что такое регулярное выражение, чтобы захватить однозначное число (например, 1), не захватывая другие числа (например, 11 или 21).Я признаю, что я не очень знаком с регулярными выражениями и обычно не нуждался в их использовании.Но мои несколько поисков в Google были напрасны.

Если бы это была всего лишь одна строка, комбинация unlist и strsplit могла бы помочь, но я не знаю, как применить это квесь столбец информационного кадра без просто итерации по строкам.

Я хотел бы узнать решение, которое не использует цикл, оно может быть с регулярным выражением или чем-то, что выполняет работу.

1 Ответ

1 голос
/ 22 июня 2019

Вот решение Tidyverse. Вызов seperate выдает предупреждение, но в остальном он работает нормально:

library(tidyverse)
df <- tibble(ColA = c("", "1", "1,9", "9,19", "1,9,19"))

df1 <- df %>% 
  mutate(n = row_number()) %>% 
  separate(ColA, into = str_c("ColA", 1:30)) %>% 
  gather(key, value, -n) %>% 
  filter(!is.na(value), value != "") %>% 
  mutate(
    key = str_c(str_sub(key, 1, 4), value),
    value2 = 1
  ) %>%
  select(-value) %>% 
  spread(key, value2)

## replace missings
df1[is.na(df1)] <- 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...