Замена источника в данных потока кликов - PullRequest
0 голосов
/ 28 октября 2018

У меня есть данные о кликах для сайта электронной коммерции.Некоторые клиенты могут купить продукт, используя кредит или финансы.К сожалению, это создает новый источник рефералов - в приведенном ниже разделе «финансы».Он также создает новый сеанс или сеансы.

Я хотел бы заменить источник 'finance' источником для источника предыдущего сеанса того же пользователя.

В примере все наблюдения для сеансов4-6871.2 & 4-6871.3 будет иметь источник 'direct' согласно сеансу 4-6871.1, а 3-6871.1 будет иметь 'google' в качестве источника согласно сеансу 3-6871.0

Мне нужно это сделатьв гораздо большем наборе данных, поэтому мне нужно применить логику, которая ищет сеансы с источником «финансы» и заменить экземпляры «финансы» на источник, непосредственно предшествующий предыдущему сеансу пользователя.

представляет данныечерез dput:

structure(list(userId = c("6.154032", "6.154032", "6.154032", 
"6.154032", "6.154032", "6.154032", "6.154032", "6.154032", "6.154032", 
"8.154036", "8.154036", "8.154036", "8.154036", "8.154036", "8.154036", 
"8.154036", "8.154036", "8.154036", "8.154036", "8.154036", "8.154036", 
"8.154036", "8.154036"), session_Id = c("4-6871.0", "4-6871.0", 
"4-6871.0", "4-6871.1", "4-6871.1", "4-6871.1", "4-6871.2", "4-6871.2", 
"4-6871.3", "3-6871.0", "3-6871.0", "3-6871.0", "3-6871.0", "3-6871.0", 
"3-6871.1", "3-6871.1", "3-6871.1", "3-6871.1", "3-6871.1", "3-6871.1", 
"3-6871.1", "3-6871.1", "3-6871.1"), timeStamp = structure(c(1540294773, 
1540294828, 1540294841, 1540307321, 1540307341, 1540307718, 1540308709, 
1540308749, 1540311289, 1540330293, 1540330309, 1540330475, 1540330541, 
1540330663, 1540331041, 1540331164, 1540331168, 1540331312, 1540331459, 
1540331465, 1540331579, 1540331603, 1540331630), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), source = c("(direct)", "(direct)", 
"(direct)", "(direct)", "(direct)", "(direct)", "finance", "finance", 
"finance", "google", "google", "google", "google", "google", 
"finance", "finance", "finance", "finance", "finance", "finance", 
"finance", "finance", "finance")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -23L))

1 Ответ

0 голосов
/ 28 октября 2018

Возможно, что-то в вашей полной структуре данных делает это решение недействительным, но вот кандидат:

df <- arrange(df, userId, timeStamp)
tmp <- rle(df$source)
tmp$values[tmp$values == "finance"] <- lag(tmp$values)[tmp$values == "finance"]
df$source <- inverse.rle(tmp)
table(df$source)
# (direct)   google 
#        9       14 

В первой строке я проверяю, что порядок правильный.Затем, предполагая, что ни для какого пользователя его первым источником не может быть сразу «финансы», в следующих двух строках я заменяю все записи «финансы» предыдущими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...