正規表現 - strsplit r



rのMATCH関数 (1)

まず、例にタイプミスがあります。 第二に、「list1 $ test1value」の割り当てには、各ラウンドで保存しないように「[i]」を追加する必要があります。 ルックアップのためにベクトル全体を検索するため、 list2$id 「[i]」を追加しないでください。

for (i in 1:length(list1)) { 
  list1$test1value[i] <- list2$test[match(list1$id[i], list2$id,
                             nomatch = NA_integer_, incomparables = NULL)] }

コードは機能しますが、ここでループする理由はありません。 あなたは、Rがどのように動作するかについての理解の欠如を示しています。 以下のコードは、まったく同じことをはるかに高速に実行します。

list1$test1value <- list2$test[match(list1$id, list2$id)]

Rは、手を握ってベクターの各要素をどのように通過するかを指示する必要がないように構築されています。 match は、各メンバーを1つずつ自動的に反復処理し、他のベクターで検索します。 また、データセット内で整然とした方法で結果を割り当てます。

他の人が示唆したように、 merge はこれに最適なので、これを複製として閉じます。

merge(list1, list2[c("id", "test")], all.x=TRUE)
#  id age  name test
#1  1  40 danny  100
#2  2  16  nora   NA
#3  3  35 james   NA
#4  4  21   ben   55

この質問にはすでに答えがあります:

リストがあり、最初のリスト(list1)にはid、name、ageがあり、他のリスト(list2、list3、..)にはidとテスト値(一意)があります。

リスト1:

id  age name    bio-test    
1   40  danny
2   16  nora            
3   35  james
4   21  ben

リスト2(バイオテスト):

id  test passed year   
1   100   yes   1
5   80    yes   n/a      
4   55    no    2

各idにテスト値をlist1に追加しようとしています(すべてのidにテスト値があるわけではありません)。

これはコードの一部です:

for (i in 1:length(list1)) { 
list1$test1value <- list2$test[match(list1$id[i], list2$id[i]),
nomatch = NA_integer_, incomparables = NULL)] }

しかし、代わりにidによってテスト値を検索し、list2から最初のテスト値のみをコピーして200セルにコピーし、他の3000はN / Aです。

なにが問題ですか?





vlookup