以下代码:
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
吗?
答案 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