На основании показанных входных данных значения во втором столбце могут быть строкой.Один из вариантов - извлечь буквы из столбца «ram» с помощью str_extract
(stringr
), stack
из двух столбцов data.frame
, получить счетчик частоты (table
) после преобразования значений.'столбец в factor
с указанием levels
, чтобы мы получили 0 для всех уровней, которые не найдены в наборе данных, измените его в формат' long 'с данными as.data.frame
library(stringr)
df2 <- stack(setNames(str_extract_all(df1$ram, '[a-z]'), seq_len(nrow(df1))))[2:1]
out <- as.data.frame(table(df2$ind, factor(df2$values, levels = letters[1:6])))[-1]
names(out) <- names(df1)
out
# items ram
#1 a 1
#2 b 1
#3 c 1
#4 d 0
#5 e 0
#6 f 0
df1 <- data.frame(items = 'x1', ram = '[a,b,c]', stringsAsFactors = FALSE)