R如果功能在不同长度的两列上

问题描述:

我是新来的R和一般的编程。我有两个数据帧,我想从两个不同的数据帧Wins和Losses的计数中计算赢率。我想检查整个列表并检查分数的值是否出现在两个列表中,如果他们这样做,我想执行和操作,如果他们不是,我只想返回一个NA。R如果功能在不同长度的两列上

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意味着你想获得全部来自数据帧的结果。

+0

真棒,谢谢,没有想到这个! – 0mm3

+0

嗯,我仍然有一个问题,因为两个不同的数据框持有胜利或损失,所以当合并时,我得到了freq的总价值,但我不知道是否有一些胜利或损失。有什么想法吗?我会更新原始问题以反映这一点。 – 0mm3

+0

你想达到什么?编辑问题并添加所需的结果。 – bartektartanus