Извлечь список значений из столбца на основе другого столбца - PullRequest
0 голосов
/ 10 января 2019

следующий код:

df <- data.frame(
  "letter" = c("a", "b", "c", "d", "e", "f"),
  "score" = seq(1,6)
)

Результаты в следующем фрейме данных:

  letter score
1      a     1
2      b     2
3      c     3
4      d     4
5      e     5
6      f     6

Я хочу получить оценки для последовательности букв, например, оценки c("f", "a", "d", "e"). Это должно привести к c(6, 1, 4, 5).

Более того, я хочу получить оценки за c("c", "o", "f", "f", "e", "e"). Теперь o отсутствует в столбце letter, поэтому он должен вернуть NA, в результате чего c(3, NA, 6, 6, 5, 5).

Каков наилучший способ достичь этого? Могу ли я использовать dplyr для этого?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Если вы хотите использовать dplyr, я бы использовал соединение:

df <- data.frame(
  "letter" = c("a", "b", "c", "d", "e", "f"),
  "score" = seq(1:6)
)

library(dplyr)

df2 <- data.frame(letter = c("c", "o", "f", "f", "e", "e"))

left_join(df2, df, by = "letter")

  letter score
1      c     3
2      o    NA
3      f     6
4      f     6
5      e     5
6      e     5
0 голосов
/ 10 января 2019

Мы можем использовать match, чтобы создать индекс и извлечь соответствующий «счет». Если совпадений нет, то по умолчанию он дает NA

df$score[match(v1, df$letter)]
#[1]  3 NA  6  6  5  5

df$score[match(v2, df$letter)]
#[1] 6 1 4 5

данные

v1 <- c("c", "o", "f", "f", "e", "e")
v2 <- c("f", "a", "d", "e")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...