2017-02-19 10 views
1

Я новичок в R и программировании в целом. У меня есть два кадра данных, из которых я хочу вычислить вероятность Win из подсчетов двух разных кадров данных Wins and 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, поскольку это будет проходить через все строки. Однако, когда я попробовал это, у меня возникла проблема с тем, что два столбца фрейма данных имеют разную длину. Я хочу повторно использовать эту функцию для множества разных фреймов данных, и они всегда будут иметь разную длину, поэтому я бы хотел, чтобы это было для решения.

Любая помощь будет высоко оценена, и я могу уточнить, если в настоящее время неясно.

Благодаря

ответ

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 означает, что вы хотите, чтобы получить все результаты из обоих кадров данных.

+0

Удивительный, спасибо, не подумал об этом! – 0mm3

+0

Хм, у меня все еще есть проблема, потому что два разных кадра данных имеют Wins или Losses, поэтому при слиянии я получаю общее значение для частоты, но я не знаю, были ли некоторые победы или потери. Есть предположения? Я буду обновлять оригинальный вопрос, чтобы отразить это. – 0mm3

+0

Что вы пытаетесь достичь? Измените вопрос и добавьте желаемый результат. – bartektartanus

Смежные вопросы