【问题标题】:Dataframe doubling the total number of rows数据框使总行数增加一倍
【发布时间】:2021-06-04 14:29:13
【问题描述】:

我正在运行以下代码:

library(tidyverse)
library(rvest)
library(magrittr)
library(dplyr)
library(tidyr)
library(data.table)
library(zoo)

commits_url <- paste0("https://247sports.com/Season/2022-Football/Commits/?Page=", 1:7)

commits_school_gather <- map_df(commits_url, ~.x %>% read_html %>%
                                  html_nodes('div.status img') %>%
                                  html_attr('title') %>%
                                  matrix(ncol = 1, byrow = T) %>% 
                                  as.data.frame)

这应该返回 238 行(至少截至目前,2021 年 3 月 5 日美国东部标准时间下午 5:36。请注意这一点以供将来的文档使用,因为该数字会随着时间而变化)。当我运行代码时,它返回 476 行,这正是我预期的两倍。

如果你运行commits_school_gather %&gt;% head(10),它看起来像这样:

V1
Rutgers
Rutgers
Notre Dame
Notre Dame
Michigan
Michigan
Akron
Akron
Notre Dame
Notre Dame

我希望输出看起来像这样:

V1
Rutgers
Notre Dame
Michigan
Akron
Notre Dame

【问题讨论】:

    标签: r dplyr purrr rvest


    【解决方案1】:

    问题在于 html_nodes() 步骤中的 css 选择器在 'dic.status img' 路径中选取了两个节点。

    试试这个:

    commits_school_gather <- map_df(commits_url, ~.x %>% read_html %>%
                                  html_nodes('div.status img.jsonly') %>%
                                  html_attr('title') %>%
                                  matrix(ncol = 1, byrow = T) %>% 
                                  as.data.frame)
    

    结果

                       V1
    1             Rutgers
    2          Notre Dame
    3            Michigan
    4               Akron
    5             Clemson
    6              Oregon
    7            Oklahoma
    8             Arizona
    9              Kansas
    10  Mississippi State
    ...
    

    解释错误:

    看看原始 css = 'div.status img' 将如何选择第 3 行和第 5 行中的节点。替代 css 仅将查询修复到第一个节点。

    【讨论】:

      【解决方案2】:

      我们可以使用rleid

      library(dplyr)
      library(data.table)
      commits_school_gather %>%
         filter(!duplicated(rleid(V1)))
      

      【讨论】:

      • 抱歉,我应该更清楚。这将返回 71 个值。我不是在寻找不同的价值观。我刚刚编辑了输出/预期输出以更好地说明我的意思。您现在会注意到Notre Dame 出现了两次,因为它预计会出现两次。同样,总行数应该是 238。同样,我不是在寻找不同的值,而是试图理解为什么这会使预期的总数翻倍以及如何解决它。
      • @LeTigris 我用rleid 更新了帖子。没有注意到第二个 notredam
      • @LeTigris 过滤后我得到 228 行
      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 2021-08-02
      • 2019-07-24
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多