我有两个角色对象,我需要查看它们共有多少个字符,然后打印出来。看到它们有多少共同点我没有问题,但我似乎无法找出打印它们的代码。这是一个简单的例子:
LETTERS
list <- c("A", "H", "J", "K")
length(na.exclude(pmatch(LETTERS[1:20],list[1:3])))
print(pmatch(LETTERS[1:20],list[1:3]))
打印:
LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"
list <- c("A", "H", "J", "K")
length(na.exclude(pmatch(LETTERS[1:20],list[1:3])))
[1] 3
print(pmatch(LETTERS[1:20],list[1:3]))
[1] 1 NA NA NA NA NA NA 2 NA 3 NA NA NA NA NA NA NA NA NA NA
所以我知道有3个共同点我知道他们的位置,但我怎么打印“A”“H”“J”?
答案 0 :(得分:2)
尝试使用%in%
> LETTERS[LETTERS %in% list]
[1] "A" "H" "J" "K"
对于你的例子:
myletters<-LETTERS[1:20]
> myletters[myletters %in% list[1:3]]
[1] "A" "H" "J"
替代方案:根据您的建议使用pmatch
pmatch(list[1:3],myletters) # gives the indices
[1] 1 8 10
myletters[pmatch(list[1:3],myletters)] # get the letters
[1] "A" "H" "J"
答案 1 :(得分:0)
如果您只想将最终结果作为一组(删除重复项),请使用:
intersect(LETTERS, c("A", "H", "J"))
如果要使用部分匹配,则必须注意pmatch
不允许第一个输入中的多个元素与第二个中的相同元素匹配。请注意区别:
mylist <- c("B","A","B","2")
> pmatch(mylist, LETTERS)
[1] 2 1 NA NA
> Vectorize(pmatch, "x")(mylist, LETTERS)
B A B 2
2 1 2 NA
现在,如果你想要打印mylist
的元素(部分)与LETTERS
的元素匹配,保持顺序和重复,你可以使用:
> mylist[!is.na(Vectorize(pmatch, "x")(mylist, LETTERS))]
[1] "B" "A" "B"