在两个角色对象中共同打印对象

时间:2013-08-25 14:59:29

标签: r string object character

我有两个角色对象,我需要查看它们共有多少个字符,然后打印出来。看到它们有多少共同点我没有问题,但我似乎无法找出打印它们的代码。这是一个简单的例子:

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”?

2 个答案:

答案 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"