У меня есть справочная таблица:
ref <- data.frame("Strong"=c("A","A","B","B","C","C","D"),
"Medium"=c("A","B","B","C","C","D","D"),
"Moderate"=c("B","C","C","C","D","D","D"),
"Weak"=c("C","C","D","D","D","D","D"))
rownames(ref) <- c("WS1","WS2","WS3","WS4","WS5","WS6","WS7")
И большое dataframe
(образец здесь и далее):
df <- data.frame("Rad"=c("Weak","Weak","Weak","Moderate","Moderate"), "Wind"=c("WS4","WS3","WS3","WS2","WS4"))
Мне нужно посмотреть Wind
иRad
значения от df
в моей справочной таблице ref
.Для этого я использую следующий код для извлечения индекса, а затем использую эти значения индекса для копирования значения из ref
:
df$x <- apply(df,1,function(x){which(colnames(ref) == df[x,"Rad"])})
df$x <- apply(df,1,function(x){which(colnames(ref) == x$Rad)})
df$y <- apply(df,1,function(x){which(rownames(ref) == df[x,"Wind"])})
df$y <- apply(df,1,function(x){which(rownames(ref) == x$Wind)})
Ожидаемый результат выглядит следующим образом:
Rad Wind PG
1 Weak WS4 D
2 Weak WS3 D
3 Weak WS3 D
4 Moderate WS2 C
5 Moderate WS4 C
Приведенный выше код работает, но есть проблемы:
- Мне не нужно было бы писать строки «дважды», но код не запустится, если я запусту только 2-йone.
- Первая строка не делает того, что ожидала (и не должна делать, так как синтаксис неверен), но, опять же, вторая строка не будет работать, если я не использую «fail»один первый
- Наконец, хотя это работает, я уверен, что есть другие, более простые способы сделать то, что я делаю.Любая подсказка будет оценена!