Я не думаю, что мы должны / можем использовать выражение eval
parse
здесь (см. Ссылку выше в комментарии от Ронак Шаха). Хорошо, возможно мы могли бы. Но мы определенно не должны. Вместо этого мы могли бы либо присоединить «таблицу поиска» к данным:
lookup_table <- read.table(text="Table c g s o
1000 2 N N N
1001 3 Y N N
1002 5 Y Y N
1003 9 Y N N
1004 11 Y N N
1005 13 N N Y", header=T, stringsAsFactors=F)
data_table <- data.frame(Table = 1000:1007,
v1 = 1:8)
data_table_joined <- merge(data_table, lookup_table[, c("Table", "g")], by="Table", all.x=TRUE)
Table v1 g
1 1000 1 N
2 1001 2 Y
3 1002 3 Y
4 1003 4 Y
5 1004 5 Y
6 1005 6 N
7 1006 7 NA
8 1007 8 NA
, либо создать функцию, которая получает значение столбца для извлечения в качестве параметра:
look_up <- function(t, c) {
f <- function(t, c) {
r <- lookup_table[lookup_table$Table %in% t, c]
return(ifelse(is.null(r), NA, r))
}
return(unlist(mapply(FUN = f, t, c)))
}
Мы можем использовать эту функцию следующим образом:
look_up(c(1005, 1005), c("g", "o"))
Или даже так:
library(dplyr)
data_table %>%
mutate(from_lookup = look_up(Table, "o"))
Table v1 from_lookup
1 1000 1 N
2 1001 2 N
3 1002 3 N
4 1003 4 N
5 1004 5 N
6 1005 6 Y
7 1006 7 <NA>
8 1007 8 <NA>