根据其他列从列中提取值列表

时间:2019-01-10 13:44:50

标签: r dataframe dplyr

以下代码:

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 :(得分:2)

我们可以使用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")

答案 1 :(得分:0)

如果您想使用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