Подсчитайте все буквы (26) одной из переменных char в кадре данных

У меня есть датафрейм с несколькими столбцами, как это:

Attr    Description
60      asdfg asdg dfs
50      smlefekl dewld ewf
35      kojewdfhef e

Все, что мне нужно, это создать дополнительные 26 столбцов с количеством каждой буквы в строке. Я знаю, что могу использовать:

table(unlist(strsplit(mydata, ""), use.names=FALSE))

для вектора, но как я могу обновить его для кадра данных?

1 ответ

Решение

Если мы используем strsplitтогда нам может понадобиться создать factor с levels указано как "буквы"

d1 <- stack(setNames(strsplit(df1$Description, ""), seq_len(nrow(df1))))
d2 <- subset(d1, values != " ")
d2$values <- factor(d2$values, levels = letters)
t(table(d2))
#   values
# ind a b c d e f g h i j k l m n o p q r s t u v w x y z    
#  1 2 0 0 3 0 2 2 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
#  2 0 0 0 2 4 2 0 0 0 0 1 3 1 0 0 0 0 0 1 0 0 0 2 0 0 0
#  3 0 0 0 1 3 2 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0

Или, как показано в комментариях, используйте str_count от stringr циклически перебирая "буквы", получайте количество этих букв для каждой строки "Описание"

library(stringr)
t(sapply(letters, function(x) str_count(df1$Description, x)))
Другие вопросы по тегам