Поиск значения из таблицы в R на основе имен столбцов и строк - PullRequest
0 голосов
/ 10 марта 2020

В настоящее время я буду sh искать значение из таблицы в R. .

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

Как мне этого добиться?

1 Ответ

0 голосов
/ 10 марта 2020

Я не думаю, что мы должны / можем использовать выражение 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...