[英]Nested Match Functions in 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"
個人_結果:
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
function 應用到每一行,將x
( Name
)作為參數傳遞給第一個match
function 以獲取ID
,然后將返回的ID
與第二個匹配項match
以獲得分數 - 將每行的所有分數相加。
我想我非常接近,但並不完全在那里。 感謝任何幫助!
這會成功的。
請注意,您不需要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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.