【问题标题】:R if function over two columns of different length [duplicate]R if函数超过两列不同长度的[重复]
【发布时间】:2017-02-19 09:59:10
【问题描述】:

我是 R 和一般编程的新手。我有两个数据帧,我想从两个不同的数据帧 Wins 和 Losses 的计数中计算获胜概率。我想检查列表并检查分数的值是否出现在两个列表中,如果出现,我想执行和操作,如果没有,我希望它只是返回一个 NA。

    df W          df L

  score freq  score freq
    5   10     5   10 
    10  10     10  5
    7   2      3   2
    4   1

这是我目前编写的函数:

    test <- function(W, L){
    if (W$score == L$score) {
      total <- W$freq + L$freq
      W$freq / total
    }
  else NA
}

我希望输出是 W 长度的列表:

0.5
0.66
NA
NA

这适用于数据框中的第一个值,但我收到以下错误:the condition has length &gt; 1 and only the first element will be used。我一直在 StackOverflow 上阅读我应该使用 ifelse 函数,因为它会循环遍历所有行。但是,当我尝试这个时,它出现了两个数据框列的长度不同的问题。我想在很多不同的数据帧上重复使用这个函数,它们总是有不同的长度,所以我想要一个解决方案。

任何帮助将不胜感激,如果目前尚不清楚,我可以进一步澄清自己。

谢谢

【问题讨论】:

    标签: r function if-statement compare probability


    【解决方案1】:

    你需要像这样使用合并函数来连接这两个数据框:

    W <- data.frame(score=c(1,2,3), freq=c(5,10,15))
    L <- data.frame(score=c(1,2,4), freq=c(2,4,8))
    merge(W, L, by=c("score"="score"), all=TRUE)
    
      score freq.x freq.y
    1     1      5      2
    2     2     10      4
    3     3     15     NA
    4     4     NA      8
    

    参数all设置为TRUE表示要从两个数据帧中获取所有结果。

    【讨论】:

    • 太棒了,谢谢,没想到这个!
    • 嗯,我仍然有一个问题,因为两个不同的数据帧持有 Wins 或 Losses,所以在合并时我得到了 freq 的总值,但我不知道有些是胜利还是失败。有什么想法吗?我将更新原始问题以反映这一点。
    • 您要达到什么目的?编辑问题并添加所需的结果。
    • 现在看我的回答。你有freq.x 是胜利,freq.y 是失败。我希望这能回答你的问题?
    • 嗨,是的,非常感谢,很抱歉造成混乱。
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多