0

c()で作成された1つのベクトルvがあり、このデータがあります。

 v[a,b,d,z,e,f], it must be unordered

そして、私は次の形式のtxtファイルを持っています:

     label      1            2          3       ....
      b        100        2000          15
      z        123          14          12
      a         55         565          55
     .....

strplitのタブで区切られたtxtファイルを抽出しました

      ext_data<-strsplit(file,"\t") 

私がやりたいのは、ベクトルVの要素がラベルの要素の1つと一致するかどうかを確認することです。一致しない場合もあります。その後、txtファイルの列1の対応する要素を抽出し、次に列の要素を抽出します。 2など

forループを使用してマッチングを行いましたが、このようにtxtファイルに含まれるデータが多すぎるため(アルゴリズム的に)時間がかかりすぎています

      for i=1 to length(v)
             for pos=2 to ext_data      #I put pos=2 because I start in the second row
                  if match(vector) and ext_data(pos,1)  
                       retrieve data from column C     

なにか提案を?

大まかに言って、私が知りたいのは、一致を使用する方法があるかどうかを知ることですが、列を使用すると、行の列ラベルを変換する可能性がありますか?

4

1 に答える 1

1

私のソリューションを説明するためにいくつかのテストデータを作成するだけです:

testdata <- data.frame(namecol=c("b","r","a","j","z","l","s","n","t"),
                       v1=sample(1:1000,9),
                       v2=sample(1:1000,9),
                       v3=sample(1:1000,9))
vecfind <- c("a","b","d","z","e","f")

[[]]またはを使用し$て、データフレームの最初の要素をベクトルとして選択し、次にwhichand%in%関数を使用して、数値の行インデックスを取得し、次のように要素を抽出できます。

v1_elements <- testdata[which(testdata[[1]] %in% vecfind),2]
v2_elements <- testdata[which(testdata[[1]] %in% vecfind),3]
v3_elements <- testdata[which(testdata[[1]] %in% vecfind),4]
于 2012-10-08T13:22:43.630 に答える