截断数据框中缺少值

时间:2016-12-08 16:37:18

标签: r

我有下一个数据帧(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个独特的页面或网址。

1 个答案:

答案 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