我有以下的R声明。基本上它遍历整个matchesData数据框并检查每行的条件是否匹配。
如果匹配,请输入' 1'在matchesData $ isRedPreferredLineup。
matchesData$isRedPreferredLineup <- ifelse((matchesData$redTop==red_poplist[1] &
matchesData$redADC==red_poplist[2] &
matchesData$redJungle==red_poplist[3] &
matchesData$redSupport==red_poplist[4] &
matchesData$redMiddle==red_poplist[5] &
matchesData$YearSeason==Season), 1,
matchesData$isRedPreferredLineup)
然而,现在我需要条件灵活。意思是,如果
matchesData$redTop==red_poplist[1]
matchesData$redADC==red_poplist[2]
matchesData$redJungle==red_poplist[3]
条件匹配,或
matchesData$redJungle==red_poplist[3]
matchesData$redSupport==red_poplist[4]
matchesData$redMiddle==red_poplist[5]
条件是匹配的,或者包含以下3个或更多条件的任何其他排列是匹配的,我想把&#39; 1&#39;在matchesData $ isRedPreferredLineup。
(matchesData$redTop==red_poplist[1] &
matchesData$redADC==red_poplist[2] &
matchesData$redJungle==red_poplist[3] &
matchesData$redSupport==red_poplist[4] &
matchesData$redMiddle==red_poplist[5] &
matchesData$YearSeason==Season)
我怎么能在像这样的矢量化ifelse语句中这样做? 或者有更好的方法吗?
请耐心等待我,我很擅长R.谢谢。
答案 0 :(得分:1)
您可以像这样对TRUE
/ FALSE
语句进行矢量化:
my.conditions <- cbind(matchesData$redTop==red_poplist[1], matchesData$redADC==red_poplist[2],
matchesData$redJungle==red_poplist[3], matchesData$redSupport==red_poplist[4],
matchesData$redMiddle==red_poplist[5], matchesData$YearSeason==Season)
然后您可以考虑S1 <- rowSums(my.conditions)
,它会在TRUE
中为您提供my.conditions
的数量,然后(您的最终条件将归结为ifelse(S1 > 2, 1, ...)
< / s>)考虑以下事项:
matchesData$isRedPreferredLineup[which(S1 > 2)] <- 1
答案 1 :(得分:1)
也许这可以工作:
selectIndex <- apply(matchesData,1,function(row){
sum(c(row['redTop'] == red_poplist[1],
row['redADC'] == red_poplist[2],
row['redJungle'] == red_poplist[3],
row['redSupport'] == red_poplist[4],
row['redMiddle'] == red_poplist[5],
row['YearSeason'] == Season) > 3)
})
matchesData$isRedPreferredLineup[selectIndex] <- 1