有更好的解决方案吗?收到“较长的对象长度不是较短的对象长度的倍数”

时间:2019-03-27 04:03:24

标签: r

这是我的例子。

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 (group in tbl) apply filter的for循环吗?

2)user_id会根据每个小组给我user_id吗?我想这是1的扩展。

3)我认为它给了我警告,因为pages$user_id很长,而user_id只是一个值。有更好的解决方案还是更合适的解决方案?

1 个答案:

答案 0 :(得分:0)

这就是您要寻找的东西

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