我有一个数据框:
a = c(1, 2, 3, 4, 9)
b = c(5, 6, 7, 8, 10)
c = c('xx','yy','zz', 'kk', 'bb')
df = data.frame(a, b, c)
> df
a b c
1 1 5 xx
2 2 6 yy
3 3 7 zz
4 4 8 kk
5 9 10 bb
一个整数向量:
> names
[1] 1 3 5 8
Levels: 1 3 5 8
我可以使用df
返回names
中a
匹配列b
或match
的索引:
> match(names, df$a)
[1] 1 3 NA NA
> match(names, df$b)
[1] NA NA 1 4
我想结合上面两个语句,对于返回的索引,返回c列中对应的特定索引值,以便输出为:
out = [1] "xx" "zz" "xx" "kk"
我试着这样做:
> df$c[match(names, df$a) | match(names, df$b)]
[1] "xx" "yy" "zz" "kk" "bb"
但是当它成为布尔测试时,它不能按要求运行。
如何实现所需的输出?非常感谢。
答案 0 :(得分:3)
我们可以尝试使用c
并指定nomatch = 0
df$c[c(match(names, df$a, nomatch = 0), match(names, df$b, nomatch=0))]
#[1] xx zz xx kk
#Levels: bb kk xx yy zz
如果我们想要as.character
类
character
换行
答案 1 :(得分:1)
df$c[c(which(df$a %in% names) , which(df$b %in% names))]
# [1] xx zz xx kk