两列不同长度上的R if函数

两列不同长度上的R if函数,r,function,if-statement,compare,probability,R,Function,If Statement,Compare,Probability,一般来说,我对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

一般来说,我对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
}
这对于数据帧中的第一个值很好,但我得到以下错误:
条件的长度>1,并且只使用第一个元素
。我在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

W太棒了,谢谢,我没想到这个!嗯,我仍然有一个问题,因为这两个不同的数据帧包含赢或输,所以当合并时,我得到了freq的总值,但我不知道有些是赢还是输。有什么想法吗?我将更新原始问题以反映这一点。您试图实现什么?编辑问题并添加所需结果。现在查看我的答案。你有赢的
freq.x
和输的
freq.y
。我希望这能回答你的问题?嗨,是的,太好了,谢谢,很抱歉给你带来困惑。
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