【问题标题】:Extracting Data and creating a new column of repetitive values提取数据并创建新的重复值列
【发布时间】:2018-02-15 15:25:36
【问题描述】:

我正在使用这样的脚本收集一些数据:

library(tidyverse)
library(rvest)
library(magrittr)
library(stringr)

foo_matrix <- read_html("#address")

test <- foo_matrix %>%  
html_nodes(#Retrieval Information) %>%
html_text() %>%
str_trim

它返回的输出如下所示:

[1] "Red Team"             "Mike Johnson"         "QB"                      "6-1"                    "191"                   
    [6] "99"                 "21"                     "2"                      "5"                      "Joe Smith"          
    [11] "OT"                     "6-3"                    "290"                    "98"                 "55"                    
    [16] "3"                      "1"

我想要做的是提取字符串中的第一个值(“红队”),然后取出剩余的数据来创建一个八列矩阵:

Mike Johnson QB 6-1 191 99 21 2 5
Joe Smith    OT 6-3 290 98 55 3 1

但是我想创建一个第九列,它从最初提取的字符串中获取值并将其应用于所有行,因此最终结果如下所示:

Mike Johnson MD 6-1 191 99 21 2 5 Red Team
Joe Smith    VA 6-3 290 98 55 3 1 Red Team

a.) 提取值然后 b.) 将其作为第九列循环遍历所有行的最佳方法是什么?

【问题讨论】:

  • 您能提供重现您的示例的网址吗?
  • @ANG 我很乐意,但不幸的是,出于隐私原因,我不能公开发布(输出结果只是虚拟数据,尽管在结构上看起来就是这样)。
  • @ANG 有没有办法可以私信别人?如果可能的话,请随意这样做,我可以在那里分享。我只是不把它公开。

标签: r web-scraping rvest stringr


【解决方案1】:

可能有更清洁的方法。

您可以首先将团队与人员数据分开,假设团队总是 第一个元素。

然后假设您的人员数据总是有 8 列,您可以在列表中 split 他们并使用 as_tibblebind_rows 将结果转换为唯一的 data.frame。

最后,使用add_column 添加团队。 mutate 也应该可以解决问题。

library(stringr)
library(purrr)
library(tibble)
library(dplyr)


data <- c("Red Team", "Mike Johnson", "QB" ,"6-1","191",               
 "99" ,"21" ,"2","5","Joe Smith" ,     
 "OT" ,"6-3" , "290" , "98" ,"55",      
 "3"  ,"1")

team <- data[1]
people <- data[-1]

resulting_df <- people %>%  
  split(ceiling(seq_along(people)/8)) %>% 
  map(~ as_tibble(t(.x))) %>% 
  bind_rows() %>% 
  add_column(team = team)

resulting_df
#> # A tibble: 2 x 9
#>   V1           V2    V3    V4    V5    V6    V7    V8    team    
#>   <chr>        <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>   
#> 1 Mike Johnson QB    6-1   191   99    21    2     5     Red Team
#> 2 Joe Smith    OT    6-3   290   98    55    3     1     Red Team

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 2023-01-30
    • 2022-11-30
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多