R 如果在不同长度的两列上运行
R if function over two columns of different length
我是 R 和一般编程的新手。我有两个数据框,我想根据两个不同数据框的获胜和失败的计数来计算获胜概率。我想检查列表并检查分数的值是否出现在两个列表中,如果出现,我想执行和操作,如果不出现,我只想 return 一个 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
。我一直在 Whosebug 上读到,我应该使用 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
表示你想得到两个数据框的所有结果。
我是 R 和一般编程的新手。我有两个数据框,我想根据两个不同数据框的获胜和失败的计数来计算获胜概率。我想检查列表并检查分数的值是否出现在两个列表中,如果出现,我想执行和操作,如果不出现,我只想 return 一个 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
。我一直在 Whosebug 上读到,我应该使用 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
表示你想得到两个数据框的所有结果。