r - 如果它们与另一个数据帧匹配,则从 r 中的数据帧中提取行
问题描述
嗨,我有 2 个数据框,其中包含 3 个类似的列 home、visitor 和 date
我想在这些条件下从 dataframe italy 中提取与 newChamps 匹配的行:
newItaly$home == newChamps$home | newItaly$visitor == newChamps$visitor & newItaly$Date >newChamps$Date
newItaly 和 newChamps 的行数不同。
更新:
我仍然无法正确获得结果。这是代码:
install_github('jalapic/engsoccerdata', username = "jalapic")
LoadLibraries <- function(){
library(stringr)
library(plyr)
library(devtools)
library(engsoccerdata)
}
ChampsData <- function(){
filteredChamps <- champs[champs$hcountry == "ITA" | champs$vcountry == "ITA", ]
finalChamps <- subset(filteredChamps, select = -c(round, leg, FT, HT, aet, pens, FTagg_home, FTagg_visitor, aethgoal, aetvgoal, tothgoal, totvgoal, totagg_home, totagg_visitor, tiewinner) )
finalChamps$Date <- as.Date(finalChamps$Date, "%y/%m/%d")
finalChamps[,"Results"] <- NA
finalChamps$Results[finalChamps$hcountry == 'ITA' & finalChamps$hgoal > finalChamps$vgoal] <- "WIN"
finalChamps$Results[finalChamps$hcountry == 'ITA' & finalChamps$hgoal < finalChamps$vgoal] <- "LOSS"
finalChamps$Results[finalChamps$vcountry == 'ITA' & finalChamps$vgoal > finalChamps$hgoal] <- "WIN"
finalChamps$Results[finalChamps$vcountry == 'ITA' & finalChamps$vgoal < finalChamps$hgoal] <- "LOSS"
finalChamps$Results[finalChamps$vgoal == finalChamps$hgoal] <- "DRAW"
finalChamps<- finalChamps[order(finalChamps$Date),]
return(finalChamps)
}
ItalyData <- function(){
amendedItaly<- subset(italy, italy$Season>1954 & italy$Season<2016)
amendedItaly<- amendedItaly[order(amendedItaly$Date),]
amendedItaly$Date <- as.Date(amendedItaly$Date, "%y/%m/%d")
finalItaly <- subset(amendedItaly, select = -c(FT, tier) )
finalItaly[,"Results"] <- NA
finalItaly$Results <- ifelse(finalItaly$hgoal < finalItaly$vgoal, finalItaly$visitor, finalItaly$home)
finalItaly$Results[finalItaly$hgoal == finalItaly$vgoal] <- "DRAW"
return(finalItaly)
}
LoadLibraries()
newChamps <- ChampsData()
newItaly <- ItalyData()
t<- newItaly[which(newItaly$home %in% unique(newChamps$home) | newItaly$visitor %in% unique(newChamps$visitor) & newItaly$Date > newChamps$Date),]
基本上,我试图匹配参加过冠军联赛的球队和参加过意大利联赛的球队,他们在周中打了一场比赛,在周末打了一场比赛。例如:如果米兰在 2018 年 2 月 5 日比赛(冠军联赛),而米兰在 2018 年 6 月 5 日比赛(意大利联赛)
解决方案
我认为你正在寻找做这样的事情:
newItaly[which(newItaly$home %in% unique(newChamps$home) |
newItaly$visitor %in% unique(newChamps$visitor) &
newItaly$Date > max(newChamps$Date) ),]
编辑
是可选的which
,你可以直接这样做:
newItaly[newItaly$home %in% unique(newChamps$home) |
newItaly$visitor %in% unique(newChamps$visitor) &
newItaly$Date > max(newChamps$Date),]
推荐阅读
- sqlite - 如何在 xamarin 中执行 Database.QueryAysnc
- java - 从嵌套的哈希图中获取、放置键和值
- javascript - 如何从数组创建键值对?
- excel - 使用 Power Shell 创建电子表格并重命名选项卡
- python - 如何在 Pandas DataFrame 中使用列值作为标题
- javascript - 数组中所有先前存储的对象都将替换为数组末尾新插入的对象。为什么?
- git - 处理来自 tfs 服务器的 Git 存储库更新
- amazon-web-services - 在 S3 上解压缩大量文件
- python - 搜索字符串并删除匹配行
- python - 如何使用 Pygame 快速渲染 Julia Set?