У меня есть проблема, для которой я не могу найти решение. Вот некоторые примеры данных:
df<-data.frame(ID1=c("A10","B73","B73","D20"),
ID2=c(NA,"B4","C05","D100"),
ID3=c(NA,"B20","C30","D41"),
ID4=c(NA,NA,"B40","D0"),
ID5=c(NA,NA,NA,"D10"),
Score=c(15,376,102,30))
>df
ID1 ID2 ID3 ID4 ID5 Score
1 A10 <NA> <NA> <NA> <NA> 15
2 B73 B4 B20 <NA> <NA> 376
3 B73 C05 C30 B40 <NA> 102
4 D20 D100 D41 D0 D10 30
У меня также есть данные с разными идентификационными номерами, которые соответствуют некоторым из ID
's в df
и соответствует Score
.Это выглядит следующим образом:
df_match<-data.frame(ID_Match=c("A10","B4","B20","E20","A355","D0","C30"),
Score_Match=c(30,55,200,120,113,23,98))
>df_match
ID_Match Score_Match
1 A10 30
2 B4 55
3 B20 200
4 E20 120
5 A355 113
6 D0 23
7 C30 98
Я хочу, чтобы R выполнял поиск совпадений идентификаторов в df
, и если есть совпадение, поместите соответствующее ID
en Score
вновый столбец.Если в одной строке содержится несколько совпадений идентификаторов, выберите совпадение идентификаторов самого правого столбца.Так бы это выглядело так:
> df_Final
ID1 ID2 ID3 ID4 ID5 Score ID_Match Score_Match
1 A10 <NA> <NA> <NA> <NA> 15 A10 30
2 B73 B4 B20 <NA> <NA> 376 B20 200
3 B73 C05 C30 B40 <NA> 102 C30 98
4 D20 D100 D41 D0 D10 30 D0 23
Я нашел ответы вроде:
IDColumns <- 1:5
d <- df[,IDColumns] == "ID"
или
df$Check <- (rowSums(df[,startsWith(names(df),"ID")]=="ID") >= 1)
Но большинство ответов, которые я нашел, искал толькосовпадение одной конкретной строки.Может ли кто-нибудь помочь мне?