R如果在两列不同长度上起作用

时间:2017-02-19 09:59:10

标签: r function if-statement compare probability

我是R的新手和一般的编程。我有两个数据帧,我想从中计算两个不同数据帧Wins和Loss的计数的Win概率。我想查看列表,检查分数的值是否出现在两个列表中,如果有,我想执行和操作,如果不是,我只想返回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函数,因为它将循环遍历所有行。但是,当我尝试这个时,它的两个数据帧列有不同长度的问题。我想在很多不同的数据框架上重复使用这个功能,它们总是有不同的长度,所以我想要一个解决方案。

任何帮助都会非常感激,如果目前还不清楚,我可以进一步澄清自己。

由于

1 个答案:

答案 0 :(得分: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表示您希望从两个数据框中获取所有结果。