3

私は 2 つの文字オブジェクトを持っています。それらに共通する文字数を確認し、それらを印刷する必要があります。それらがいくつ共通しているかを確認するのに問題はありませんが、それらを印刷するコードを理解できないようです。簡単な例を次に示します。

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」を印刷できますか?

4

2 に答える 2

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"
于 2013-08-25T15:02:40.360 に答える
0

最終結果のみをセットとして (重複を削除して) 必要な場合は、次のように使用します。

intersect(LETTERS, c("A", "H", "J"))

部分一致を使用する場合は、最初の入力の複数の要素が 2 番目の入力の同じ要素と一致することを許可しない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"
于 2013-08-25T17:20:48.627 に答える