【问题标题】:Look through DF, find rows that contain opposite matches of two column strings查看 DF,找到包含两列字符串相反匹配的行
【发布时间】:2018-05-03 20:04:38
【问题描述】:

使用大量大学篮球决赛得分数据集,我只寻找两支球队交手过两次的情况。

df <- data.frame(Home = c("Air Force", "Air Force", "Air Force", "BYU"), 
             HomeScore = c(79, 72, 88, 82), 
             Away = c("BYU", "Utah", "Wyoming", "Air Force"),
             AwayScore = c(83, 74, 92, 72),
             HomeMargin = c(-4, -2, -4, 10),
             HomeWin = c(0, 0, 0, 1))

数据全部从单独的数据库中导入。我的最终目标是创建最后一列,“迭代”,表示主队是否在客场赢得了同一场比赛,只针对发生过两次的比赛(一次主场,一次客场)。

使用上面的例子,空军在家里和路上玩过一次 BYU。他们输掉了主场比赛,但赢得了客场比赛。第 1 行将在“迭代”下包含“1”,第 2 行和第 3 行将包含“NA”,第 4 行将包含“0”。

【问题讨论】:

    标签: r dataframe string-matching


    【解决方案1】:

    给你!

    df3 <- left_join(df, 
                     select(df, Home, Away, iteration = HomeWin), 
                         by = c("Home" = "Away", "Away" = "Home")
                     )
    

    您可以将其与自身相左加入,在 Home 和 Away、Away 和 Home 上匹配,然后只引入 HomeWin。

    我添加了select(df, Home, Away, iteration = HomeWin),因为我想过滤掉那个df。您可以将其另存为其他内容,然后根据需要在联接中引用它。

    希望这会有所帮助!

    【讨论】:

    • 请注意,如果有超过 2 场比赛的情况,这将变得一团糟,双方各有 1 场。如果 BYU 在家玩 Air Force 两次,而一旦离开,它就会搞砸,你需要一个不同的解决方案,所以如果可行,请 lmk。
    • 谢谢!稍加调整就可以做到这一点。关于您的担忧,我有点担心这将我的数据框限制为奇数个观察值。这似乎没有意义,但不会经历整个 2065 年寻找奇怪的游戏。
    • 出于好奇,您做了哪些调整?
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多