Это мой пример.
user_id <- sample(seq(1,100),5000, TRUE)
friend_id <- sample(seq(1,100),5000, TRUE)
friends <- data.frame(user_id, friend_id)
friends <- friends %>%
filter(!user_id == friend_id)
friends <- friends %>% arrange(user_id) %>% distinct()
user_id <- sample(seq(1,100),10000, TRUE)
page_id <- sample(seq(1000,2000),10000, TRUE)
pages <- data.frame(user_id, page_id)
pages <- arrange(pages, user_id) %>% distinct()
popular <- friends %>%
left_join(pages, by = c("friend_id" = "user_id")) %>%
group_by(user_id, page_id) %>%
summarize(likes = n()) %>%
arrange(-likes) %>%
filter(!page_id %in% pages[pages$user_id == user_id,]$page_id)
Моя цель - подсчитать количество лайков для каждой из страниц, которые понравились другу пользователя. Последний шаг дает мне это предупреждение:
50: на страницах $ user_id == user_id: более длинная длина объекта не
кратно короткой длине объекта
Моя цель на последнем шаге - отфильтровать любую понравившуюся страницу.
1) Если я сгруппирую по столбцу и затем применю фильтр, будет ли он применяться к каждому из сгруппированных кадров данных отдельно? Другими словами, это похоже на цикл for, который говорит for (group in tbl) apply filter
?
2) user_id
даст мне user_id
по каждой группе? Я думаю, это расширение 1.
3) Я думаю, что это дает мне предупреждение, поскольку pages$user_id
длинное, а user_id
- только одно значение. Есть ли лучшее решение или более подходящее решение?