r如果在不同长度的两列上函数



我是R的新手和编程。我有两个数据帧,我想从两个不同的数据框架获胜和损失的计数中计算出获胜概率。我想检查列表,并检查分数的值是否出现在两个列表中,如果这样做,我想执行和操作,如果他们不这样做,我只想返回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 > 1 and only the first element will be used。我一直在stackoverflow上阅读,应该使用ifelse函数,因为这将循环穿过所有行。但是,当我尝试使用时,它的两个数据框列有不同的长度。我想通过许多不同的数据帧重复使用此功能,并且它们始终具有不同的长度,因此我希望解决方案。

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

谢谢

您需要使用这样的合并函数加入这两个数据帧:

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表示您想从两个数据帧中获取所有结果。

相关内容

  • 没有找到相关文章

最新更新