Добавить столбец путем подсчета слов для каждой строки в коде R - PullRequest
0 голосов
/ 28 августа 2018

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

structure(list(x = 1:15, iteml = structure(c(2L, 1L, 1L, 1L, 
5L, 4L, 4L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("{dulce1_rojo", 
"{dulce2_verde", "{dulce7_plata", "{miel21_amarillo", "{miel30_azul"
), class = "factor"), item2 = structure(c(4L, 2L, 2L, 2L, 1L, 
5L, 5L, 4L, 3L, 3L, 4L, 1L, 4L, 4L, 1L), .Label = c("chocolate2l_amarillo", 
"dulce2_verde", "dulce7_plata", "miel21_amarillo", "miel30_azul"
), class = "factor"), item3 = structure(c(1L, 1L, 3L, 3L, 2L, 
2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 1L, 2L), .Label = c("chocolate2l_amarillo", 
"chocolate30_azul", "miel21_amarillo"), class = "factor"), item4 = structure(c(2L, 
2L, 2L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("chocolate2l_amarillo", 
"chocolate32_violeta", "cookie30_azul"), class = "factor"), item5 = structure(c(2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("cookie2l_amarillo}", 
"cookie32_violeta}"), class = "factor"), item6 = structure(c(4L, 
6L, 1L, 3L, 6L, 1L, 2L, 4L, 6L, 2L, 5L, 6L, 1L, 2L, 4L), .Label = c(">{chocolate2l_amarillo}", 
">{chocolate30_azul}", ">{chocolate32_violeta}", ">{dulce1_rojo}", 
">{dulce7_plata}", ">{miel21_amarillo}"), class = "factor")), class = "data.frame", row.names = c(NA, 
-15L))

Я не знаю, как подсчитать в новых столбцах только конфеты, которые есть в каждой строке. Эта первая строка в качестве ожидаемого вывода результирующего фрейма данных:

  x         iteml           item2                item3               item4             item5          item6 dulce miel chocolate cookie
1 1 {dulce2_verde miel21_amarillo chocolate2l_amarillo chocolate32_violeta cookie32_violeta} >{dulce1_rojo}     2    1         2      1

Я застрял и был бы признателен за небольшую помощь.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать функцию apply, чтобы применить grepl функцию за строкой для начального фрейма данных. Затем вы используете sapply для итерации четырех указанных вами ингредиентов. Затем используйте cbind для объединения исходного фрейма данных и фрейма данных с ингредиентами в один. Пожалуйста, смотрите код ниже:

# initialize data frame
df <- structure(list(x = 1:15, iteml = structure(c(2L, 1L, 1L, 1L, 
5L, 4L, 4L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("{dulce1_rojo", 
"{dulce2_verde", "{dulce7_plata", "{miel21_amarillo", "{miel30_azul"
), class = "factor"), item2 = structure(c(4L, 2L, 2L, 2L, 1L, 
5L, 5L, 4L, 3L, 3L, 4L, 1L, 4L, 4L, 1L), .Label = c("chocolate2l_amarillo", 
"dulce2_verde", "dulce7_plata", "miel21_amarillo", "miel30_azul"
), class = "factor"), item3 = structure(c(1L, 1L, 3L, 3L, 2L, 
2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 1L, 2L), .Label = c("chocolate2l_amarillo", 
"chocolate30_azul", "miel21_amarillo"), class = "factor"), item4 = structure(c(2L, 
2L, 2L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("chocolate2l_amarillo", 
"chocolate32_violeta", "cookie30_azul"), class = "factor"), item5 = structure(c(2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("cookie2l_amarillo}", 
"cookie32_violeta}"), class = "factor"), item6 = structure(c(4L, 
6L, 1L, 3L, 6L, 1L, 2L, 4L, 6L, 2L, 5L, 6L, 1L, 2L, 4L), .Label = c(">{chocolate2l_amarillo}", 
">{chocolate30_azul}", ">{chocolate32_violeta}", ">{dulce1_rojo}", 
">{dulce7_plata}", ">{miel21_amarillo}"), class = "factor")), class = "data.frame", row.names = c(NA, 
-15L))

# counting ingridients
ingridients <- c("dulce", "miel", "chocolate", "cookie")
x <- sapply(ingridients, function(y) apply(df, 1, function(x) sum(grepl(y, x))))
df_res <- cbind(df, x)                                                                        
head(df_res)                                                                         

Выход:

  x            iteml                item2                item3                item4              item5                   item6 dulce miel chocolate cookie
1 1    {dulce2_verde      miel21_amarillo chocolate2l_amarillo  chocolate32_violeta  cookie32_violeta}          >{dulce1_rojo}     2    1         2      1
2 2     {dulce1_rojo         dulce2_verde chocolate2l_amarillo  chocolate32_violeta  cookie32_violeta}      >{miel21_amarillo}     2    1         2      1
3 3     {dulce1_rojo         dulce2_verde      miel21_amarillo  chocolate32_violeta  cookie32_violeta} >{chocolate2l_amarillo}     2    1         2      1
4 4     {dulce1_rojo         dulce2_verde      miel21_amarillo chocolate2l_amarillo  cookie32_violeta}  >{chocolate32_violeta}     2    1         2      1
5 5     {miel30_azul chocolate2l_amarillo     chocolate30_azul        cookie30_azul cookie2l_amarillo}      >{miel21_amarillo}     0    2         2      2
6 6 {miel21_amarillo          miel30_azul     chocolate30_azul        cookie30_azul cookie2l_amarillo} >{chocolate2l_amarillo}     0    2         2      2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...