R: преобразовать строку с разделителями в переменные

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

"Ab BC" "" "XC" "N Ab FS" : 

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

 df$Ab = 1,0,0,1 df$B = 1,0,0,0 df$C = 1,0,1,0 df$F = 0,0,0,1 df$N = 0,0,0,1 

Каков наилучший способ сделать это?

Предполагая, что вы начинаете с:

 df <- data.frame(v1 = c("Ab BC", "", "XC", "N Ab FS")) 

Вы можете попробовать cSplit_e из моего пакета splitstackshape:

 library(splitstackshape) cSplit_e(df, "v1", sep = " ", type = "character", fill = 0) # v1 v1_Ab v1_B v1_C v1_F v1_N v1_S v1_X # 1 Ab BC 1 1 1 0 0 0 0 # 2 0 0 0 0 0 0 0 # 3 XC 0 0 1 0 0 0 1 # 4 N Ab FS 1 0 0 1 1 1 0 

Можешь попробовать

 library(qdapTools) lst <- strsplit(df1$Col1, ' ') cbind(df1, mtabulate(lst)) # Col1 Ab BCFNSX #1 Ab BC 1 1 1 0 0 0 0 #2 0 0 0 0 0 0 0 #3 XC 0 0 1 0 0 0 1 #4 N Ab FS 1 0 0 1 1 1 0 

Или используя base R

 lvls <- sort(unique(unlist(lst))) cbind(df1, t(vapply(lst, function(x) table(factor(x, levels=lvls)), numeric(length(lvls))))) 

данные

 df1 <- structure(list(Col1 = c("Ab BC", "", "XC", "N Ab FS")), .Names = "Col1", row.names = c(NA, -4L), class = "data.frame") 

В базе R другой подход:

 lst = strsplit(df$Col1, ' ') cols = unique(unlist(lst)) m = do.call(rbind, lapply(lst, function(u) cols %in% u +0)) colnames(m) = cols #> m # Ab BCXNFS #[1,] 1 1 1 0 0 0 0 #[2,] 0 0 0 0 0 0 0 #[3,] 0 0 1 1 0 0 0 #[4,] 1 0 0 0 1 1 1 
  • Создайте последовательность, такую ​​как 112123123412345
  • добавление NA, чтобы все элементы списка равны длине
  • Условно удалить строки Dataframe с R
  • Есть ли такой «colsd» в R?
  • как вернуть число десятичных знаков в R
  • Загрузка нескольких файлов одновременно?
  • Функция не найдена в R doParallel 'foreach' - Ошибка в {: task 1 failed - "не удалось найти функцию" растровый "
  • Добавить столбец с порядковым числом
  • Процент% в%
  • Использование '[' квадратная скобка как функция для lapply в R
  • Ограниченная суммарная сумма?
  • Давайте будем гением компьютера.