我是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
函数,因为它将循环遍历所有行。但是,当我尝试这个时,它的两个数据帧列有不同长度的问题。我想在很多不同的数据框架上重复使用这个功能,它们总是有不同的长度,所以我想要一个解决方案。
任何帮助都会非常感激,如果目前还不清楚,我可以进一步澄清自己。
由于
答案 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
表示您希望从两个数据框中获取所有结果。