Одна идея была бы следующей. Насколько я вижу шаблон, вы нацеливаетесь на значения, которые содержат две заглавные буквы в Value
. Я искал, где они используют grep()
и получил показатель. Используя эту информацию, я создал переменную группы, используя findIntervals()
. Для каждой группы я агрегировал данные; Я извлек и поместил значение заглавной буквы в categoria
. Аналогичным образом я создал еще две колонки. Это списки. Поэтому я использовал unnest()
в конце, чтобы получить вывод.
library(tidyverse)
ind <- grep(x = mydf$Value, pattern = "[A-Z]+")
group_by(mydf, group = findInterval(x = 1:n(), vec = ind)) %>%
summarize(categoria = Value[google_prod == "categoria"],
Google_prod = list(google_prod[google_prod != "categoria"]),
Value = list(Value[google_prod != "categoria"])) %>%
unnest(cols = Google_prod:Value)
group categoria Google_prod Value
<int> <chr> <chr> <chr>
1 1 ML google 120
2 1 ML youtube 24
3 2 AO google 2
4 2 AO youtube 0
5 3 ML google 27
6 3 ML youtube 0
7 4 AO google 5
8 4 AO youtube 0
DATA
mydf <- structure(list(google_prod = c("categoria", "google", "youtube",
"categoria", "google", "youtube", "categoria", "google", "youtube",
"categoria", "google", "youtube"), Value = c("ML", "120", "24",
"AO", "2", "0", "ML", "27", "0", "AO", "5", "0")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))