Вложенные функции соответствия в R - PullRequest
2 голосов
/ 19 октября 2019

Это продолжение до Как искать и суммировать несколько столбцов в R :

У меня есть 3 фрейма данных как таковые:

Группы:

P1          P2          P3          P4      
"Joe"       "Sally"     "A.J."      "Mary"  
"Cory"      "Joe"       "Sally"     "Katy"

Имена:

ID      NAME
123     "Joe"
213     "Sally"
312     "A.J."
231     "Mary"
345     "Cory"
567     "Katy"

Individual_Results:

ID      SCORE
123     23
213     12
312     11
231     19
345     10
567     22

Моя цель - создать новый столбец в Groups со столбцом SCORE, представляющим собой суммукаждого из результатов в группе

P1          P2          P3          P4          SCORE
"Joe"       "Sally"     "A.J."      "Mary"      65

Следуя примеру ответа в указанном выше вопросе, я попытался сделать следующее

groups$score = apply(groups, 1, function(x){
    sum(Individual_Results$SCORE[match(match(x, Names$Name), Individual_Results$ID)])
    })

К сожалению, результатом является созданиеновый столбец, но результат равен NA для каждого счета.

Если я понимаю, как правильно использовать apply и match, то я пытаюсь сделать apply функциюк каждой строке, передавая x (Name) в качестве параметра первой функции match, чтобы получить ID, а затем сопоставляя возвращенные ID второму match, чтобы получить счет- суммируя все оценки в ряду.

Я думаю, что я очень близок, но просто не совсем там. Цени любую помощь!

1 Ответ

2 голосов
/ 19 октября 2019

Это поможет.

Обратите внимание, что вам не нужно data.table. Я просто использовал его, чтобы сделать воспроизводимый пример

require(data.table)

Groups <- data.frame(fread('"P1","P2","P3","P4"
"Joe","Sally","A.J.","Mary"
"Cory","Joe","Sally","Katy"'))

Names <- data.frame(fread('ID,NAME
123,"Joe"
213,"Sally"
312,"A.J."
231,"Mary"
345,"Cory"
567,"Katy"'))

Individual_Results <- data.frame(fread('ID,SCORE
123,23
213,12
312,11
231,19
345,10
567,22'))


Groups$SCORE <- apply(Groups, 1, function(x){
  sum(Individual_Results$SCORE[match(Names$ID[match(x, Names$NAME)], Individual_Results$ID)])
})


# Inspect groups:
Groups
#      P1    P2    P3   P4 SCORE
# 1  Joe Sally  A.J. Mary    65
# 2 Cory   Joe Sally Katy    67

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...