R - 灵活的条件

时间:2018-03-06 10:36:51

标签: r

我有以下的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.谢谢。

2 个答案:

答案 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