我有下一个数据帧(t),包含317,000个障碍物。
date | page | rank
2015-10-10 | url1 | 1
2015-10-10 | url2 | 2
2015-10-10 | url2 | 3
.
.
.
2015-10-10 | url1000 | 1000
2015-10-11 | url1 | 1
我正在尝试截断这些数据,因为我想知道有多少天,某个特定网址的排名保持在50或更低。
piv = reshape(t,direction = "wide", idvar = "page", timevar = "date")
如果我这样做,我获得了一个包含27,447个obs和318列的表格,但它产生了很多NA。以下示例(仅20列)
page id.2015-12-07 id.2015-12-08 id.2015-12-09 id.2015-12-10 id.2015-12-11 id.2015-12-12 id.2015-12-13
1 url1 1 1 1 1 1 2 2
id.2015-12-14 id.2015-12-15 id.2015-12-16 id.2015-12-17 id.2015-12-18 id.2015-12-19 id.2015-12-20 id.2015-12-21
1 1 1 1 1 106 534 NA 282
id.2015-12-22 id.2015-12-23 id.2015-12-24 id.2015-12-26
1 270 445 NA NA
同样使用演员表我有下一个错误
pivoted = cast(t,page ~ rank + date )
****Using id as value column. Use the value argument to cast to override this choice
Error in `[.data.frame`(data, , variables, drop = FALSE) :
undefined columns selected****
我有317个独特的日期和27,447个独特的页面或网址。
答案 0 :(得分:2)
我建议您使用dplyr
包进行此类任务,如果可以的话:
library(dplyr)
df %>%
filter(rank <= 50) %>%
group_by(page) %>%
summarize(days_in_top_50 = n())
会为您提供您正在寻找的结果。
每页和每天都有行。第一行(filter
)表示您只想考虑排名位于前50行的行。第二行(group_by
)表示您希望逐页获取结果,最后在第三行n()
函数计算为每个页面传递过滤器的行。
有关详细信息,请查看https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html