这是我的例子。
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
只是一个值。有更好的解决方案还是更合适的解决方案?
答案 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