我如何清理和组织这个抓取数据列表?
How do I clean and organize this list of scraped data?
我的问题是,在这个社区的大力帮助下,我已经设法抓取了大部分我想要的数据;但是,我没有设法以任何有意义的方式组织它。我在 source
中使用的链接是我为这个项目拥有的许多链接中的一个示例,这些链接代表了所有链接
library(rvest)
library(tidyverse)
#source links
source<-c("http://www.ufcstats.com/fighter-details/f2688492b9a525a3","http://www.ufcstats.com/fighter-details/f1fac969a1d70b08")
fp_e<-map(source, function(career_data){
read_html(career_data)%>%
html_nodes("div ul li")%>%
html_text()%>%
#cleans up the data a bit
str_replace_all(.,"\n\s+\n\s+","")%>%
as.data.frame(.)
})
我想用这个列表做的是把它变成一个可用的数据框。我最初的想法是transpose()
它在as.data.frame()
之后;但是,它所做的只是将所有内容都放在一行中。此外,我无法索引数据框。这让我相信数据框并没有像我想象的那样设置。我想在这里说得更具体一些,但老实说,我现在很困惑。
四处搜索,我发现了这个 并且 neilfws 的回答给了我构建数据框并将数据插入其中的想法;但是,我什至不知道从哪里开始。我也不确定是否有必要在已经以我喜欢的格式设置时这样做。
这是我尝试过的第一个真实 R
应用程序,我真的很迷茫如何组织这些数据。感谢您的帮助和建议!
您可以使用 tidyverse
库进行一些数据清理:
library(tidyverse)
library(rvest)
map(source, function(career_data){
read_html(career_data) %>%
html_nodes("div ul li")%>%
html_text() %>%
trimws(whitespace = '[\s\n]') %>%
tibble(data = .) %>%
separate(data, c('Property', 'Value'), sep = ':') %>%
na.omit() %>%
mutate(Value = trimws(Value, whitespace = '[\n\s]'))
})
这个returns:
#[[1]]
# A tibble: 13 x 2
# Property Value
# <chr> <chr>
# 1 Height "5' 6\""
# 2 Weight "135 lbs."
# 3 Reach "68\""
# 4 STANCE "Orthodox"
# 5 DOB "Oct 16, 1981"
# 6 SLpM "3.70"
# 7 Str. Acc. "39%"
# 8 SApM "2.70"
# 9 Str. Def "66%"
#10 TD Avg. "2.28"
#11 TD Acc. "31%"
#12 TD Def. "65%"
#13 Sub. Avg. "0.3"
#[[2]]
# A tibble: 13 x 2
# Property Value
# <chr> <chr>
# 1 Height "6' 2\""
# 2 Weight "170 lbs."
# 3 Reach "74\""
# 4 STANCE "Southpaw"
# 5 DOB "Aug 25, 1991"
# 6 SLpM "2.53"
# 7 Str. Acc. "47%"
# 8 SApM "2.05"
# 9 Str. Def "55%"
#10 TD Avg. "1.39"
#11 TD Acc. "31%"
#12 TD Def. "70%"
#13 Sub. Avg. "0.4"
我的问题是,在这个社区的大力帮助下,我已经设法抓取了大部分我想要的数据;但是,我没有设法以任何有意义的方式组织它。我在 source
中使用的链接是我为这个项目拥有的许多链接中的一个示例,这些链接代表了所有链接
library(rvest)
library(tidyverse)
#source links
source<-c("http://www.ufcstats.com/fighter-details/f2688492b9a525a3","http://www.ufcstats.com/fighter-details/f1fac969a1d70b08")
fp_e<-map(source, function(career_data){
read_html(career_data)%>%
html_nodes("div ul li")%>%
html_text()%>%
#cleans up the data a bit
str_replace_all(.,"\n\s+\n\s+","")%>%
as.data.frame(.)
})
我想用这个列表做的是把它变成一个可用的数据框。我最初的想法是transpose()
它在as.data.frame()
之后;但是,它所做的只是将所有内容都放在一行中。此外,我无法索引数据框。这让我相信数据框并没有像我想象的那样设置。我想在这里说得更具体一些,但老实说,我现在很困惑。
四处搜索,我发现了这个
这是我尝试过的第一个真实 R
应用程序,我真的很迷茫如何组织这些数据。感谢您的帮助和建议!
您可以使用 tidyverse
库进行一些数据清理:
library(tidyverse)
library(rvest)
map(source, function(career_data){
read_html(career_data) %>%
html_nodes("div ul li")%>%
html_text() %>%
trimws(whitespace = '[\s\n]') %>%
tibble(data = .) %>%
separate(data, c('Property', 'Value'), sep = ':') %>%
na.omit() %>%
mutate(Value = trimws(Value, whitespace = '[\n\s]'))
})
这个returns:
#[[1]]
# A tibble: 13 x 2
# Property Value
# <chr> <chr>
# 1 Height "5' 6\""
# 2 Weight "135 lbs."
# 3 Reach "68\""
# 4 STANCE "Orthodox"
# 5 DOB "Oct 16, 1981"
# 6 SLpM "3.70"
# 7 Str. Acc. "39%"
# 8 SApM "2.70"
# 9 Str. Def "66%"
#10 TD Avg. "2.28"
#11 TD Acc. "31%"
#12 TD Def. "65%"
#13 Sub. Avg. "0.3"
#[[2]]
# A tibble: 13 x 2
# Property Value
# <chr> <chr>
# 1 Height "6' 2\""
# 2 Weight "170 lbs."
# 3 Reach "74\""
# 4 STANCE "Southpaw"
# 5 DOB "Aug 25, 1991"
# 6 SLpM "2.53"
# 7 Str. Acc. "47%"
# 8 SApM "2.05"
# 9 Str. Def "55%"
#10 TD Avg. "1.39"
#11 TD Acc. "31%"
#12 TD Def. "70%"
#13 Sub. Avg. "0.4"