Есть ли лучшее решение? Получение "большая длина объекта не кратна короткой длине объекта" - PullRequest
0 голосов
/ 27 марта 2019

Это мой пример.

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 - только одно значение. Есть ли лучшее решение или более подходящее решение?

1 Ответ

0 голосов
/ 27 марта 2019

Это то, что вы ищете:

pages_agg <- pages %>%
  group_by(user_id) %>%
  summarise(likes = n()) 

left_join(friends, pages_agg, by = c("friend_id" = "user_id")) %>%
  head()
  user_id friend_id likes
1       1        44   107
2       1        76    90
3       1        36   116
4       1         4   110
5       1        57    93
6       1        32    96
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...