dplyr left join显示的连接变量多于指定的数量

时间:2018-03-13 01:35:16

标签: r dataframe web-scraping left-join

好的,这就是我的问题。我试图从网站上删除大量数据。我的代码如下所示:

library(XML)
library(RCurl)
library(rlist)
library(rvest)
library(dplyr)

team_performance <- read.csv("C:/Users/Will/Documents/team_performance.csv")
stats_names <- read.csv("C:/Users/Will/Documents/stats_names.csv")
date_vals <- read.csv("C:/Users/Will/Documents/date_vals.csv")
teams_list <- read.csv("C:/Users/Will/Documents/teams_list.csv")

date_vals <- date_vals[[1]]
stats_names <- stats_names[[1]]
team_stats <- NULL

for(i in c(0:10)){
  burner <- teams_list
  burner$Year <- (2007 + i)
  team_stats <- rbind(team_stats, burner)
}

names(team_stats)[[1]] <- "Team"



percent_complete <- 0

for(x in date_vals){
  for(i in stats_names){
    mpg_link <- getURL(paste0("https://www.teamrankings.com/ncaa-    basketball/stat/",gsub(" ","-",i),"?date=",x),.opts = list(ssl.verifypeer = FALSE) )
    tables <- readHTMLTable(mpg_link)
    tables <- list.clean(tables, fun = is.null, recursive = FALSE)
    n.rows <- unlist(lapply(tables, function(t) dim(t)[1]))
    temp_data <- data.frame(tables)

    temp_data$NULL.Stat <- i

    names(temp_data)[3] <- temp_data$NULL.Stat[1]
    names(temp_data)[2] <- "Team"
    temp_data <- temp_data[,-c(4:8)]
    temp_data$Year <- as.numeric(substr(as.character(x),1,4))

    team_stats <- left_join(team_stats,temp_data[,-c(1,4)], by.x = "Team", by.y = "Year")

    percent_complete <- percent_complete + (100/979)
    print(paste(round(percent_complete,digits=2),"% complete",sep=""))
  }
}

第一年(2017年)完成后,在加入完成后,我收到如下消息:

Joining, by = c("Team", "Year", "Points Per Game")

而不是像这样的消息:

Joining, by = c("Team", "Year")

为什么会发生这种情况的任何想法?

编辑:确定不再收到消息,但仍然无法切换一年。一旦它开始刮到2016年,数据就不会出现在2016年的哪个位置。

1 个答案:

答案 0 :(得分:1)

left_join中,语法应为

left_join(team_stats,temp_data[,-c(1,4)], by=c(Team = "Year"))

虽然列名对连接没有意义。它基于OP的语法。

by.xby.xmerge中的参数(来自base R

作为可重复的例子

set.seed(24)
df1 <- data.frame(col1 = 1:5, col2 = rnorm(5))
df2 <- data.frame(A = rep(1:3, each = 2), B = rnorm(6))

OP的方法在dplyr_0.7.4

中出错
left_join(df2, df1, by.x = 'A', by.y = 'col1')
  

错误:by是必需的,因为数据源没有共同点   变量

因为参数不匹配

left_join(df2, df1, by = c(A= "col1"))
#  A            B       col2
#1 1  0.266021979 -0.5458808
#2 1  0.444585270 -0.5458808
#3 2 -0.466495124  0.5365853
#4 2 -0.848370044  0.5365853
#5 3  0.002311942  0.4196231
#6 3 -1.316908124  0.4196231