2016-06-24 11 views
2

私はフランスの工学の学生です。私は大学でRでプロジェクションをしています。私は実際に私のデータベースに特有のことをしています。列内の値のプレフィックスに基づいてデータフレームを並べ替えます。

私のデータベースには、以下のようになります。

 id   grades  std_id    UID 
    1004   1   1004  cm1_AZZ_005_LKJ_xxx 
    1004   1   1004  cm1_AZZ_002_LKJ_xxx 
    1004   0   1004  cm1_AZZ_005_LKJ_xxx 
    1004   1   1004  cm1_AZZ_002_LKJ_xxx 
    1004   0   1004  cm1_AZZ_002_LKJ_xxx 
    1004   1   1004  cm1_AZZ_009_LKJ_xxx 
    1004   1   1004  cm1_AZZ_002_LKJ_xxx 
    7687   1   0897  cm1_XYZ_457_HGF_xxx 
    7687   1   0897  cm1_XYZ_970_HGF_xxx 
    7687   1   0897  cm1_XBZ_674_KGH_xxx 
    7687   0   0897  cm1_XBZ_987_KGH_xxx 
    7687   1   0897  cm1_XBZ_780_KGH_xxx 
    ....  .....  ....    ..... 

私は列UID内の値と私のデータベースをソートしたいと思います。

私のデータベースはサイズが大きく、UIDの値はデータベースの下で異なる場合があります。

現在、私は手動で各異なるUIDの間隔を取っているが、それは明らかに非効率的です。

list_002 <- new_items[1:7] 
list_003 <- new_items[8:9] 
list_005 <- new_items[10:12] 

あなたは、私はちょうどUIDの接頭辞としていないと私のデータベースをソートしたいと考えて見ることができるようにすべての文字。私のデータベースで

Prefix : cm1_AZZ, cm1_XYZ, cm1_XBZ 

UID接頭常に(cm1_AZZ、cm1_XYZ、cm1_XBZ)ですが、接尾辞は変更することができます。

私は、各UIDによって異なるリストを3種類のリストを持っているUIDサフィックスに基づいて3種類のリスト「(cm1_AZZ、cm1_XYZ、cm1_XBZ)」のデータベースをソートしたいとしていないでしょう。そのような

:私を助けるため

list_AAZ <- list() 
list_XYZ <- list() 
list_XBZ <- list() 

list_AZZ <- cm1_AZZ_005  list_XYZ <- cm1_XYZ_457 
      cm1_AZZ_002     cm1_XYZ_970 
      cm1_AZZ_005 
      cm1_AZZ_002 
      cm1_AZZ_002 
      cm1_AZZ_009 
      cm1_AZZ_002 

list_X4Z <- cm1_XBZ_674 
      cm1_XBZ_987 
      cm1_XBZ_780 

ありがとうございます。私の貧しい英語のために申し訳ありません。 splitを使用して

+0

を使用して例えば要素にアクセスすることができます) '、次に' sort() 'を実行します。 – zx8754

答えて

4

subあなたができる:

# original answer (before question update): 
# new_list <- split(df, sub("(cm1_\\d{3}).*", "\\1", df$UID)) 
# updated answer: 
new_list <- split(df, sub("(cm1_[^_]+).*", "\\1", df$UID)) 

これは、(接尾辞を除く)UID-グループの各セットはdata.frameであるリストを返します。

あなたはその後、その後、 `スプリット(スプリット` UID`例えば使用して3列に `tidyr ::別々の()`

new_list$cm1_AZZ 

または

new_list[[2]] 
+0

@docendoありがとう、それは作品ですが、私は正しく質問をしないと思います。私は自分の投稿を編集しました。 –

+0

@ SofianeM'barkiさん、更新のために、代わりに 'split(df、sub(" cm1 _ [^ _] +)。* "、" \\ 1 "、df $ UID))')を試すことができます –

+0

完璧に動作します!ありがとう@docendodiscimus。良い継続! –

関連する問題