2017-06-05 17 views
2

私は以下のようにDFを持って見つけるためにどのように文字列

DF:

Name    |Code 
-------------------+----- 
aman    |abc 
akash    |bcd 
rudra    |cde 
Tushar    |def 
Kartik    |efg 
aman,akash   |fgh 
akash,rudra  |ghi 
akash,rudra,aman |ijk 
aman,Tushar  |jkl 
Kartik,Tushar  |klm 
rudra,Kartik,akash |lmn 
私は以下を取得する

Name   | 
----------------+ 
aman,akash,rudra| 
Tushar,aman  | 
Kartik   | 
rudra,akash  | 

dfを以下のコードを検索したい

結果

Name   |code 
----------------+----- 
aman,akash,rudra|ijk 
Tushar,aman  |jkl 
Kartik   |efg 
rudra,akash  |ghi 

"rudra、akash" occuのコンボrを3回実行した場合、アルファベット順のコードを返す

これを達成する方法があるかどうか教えてください。

+1

@RonakShah実際のデータセットは非常に大きいです。これはちょうどサンプルセットです... 前の質問で、soutionは "aman、akash、rudra"という名前のコードのすべての値を取得していました。 ここで私はコードの最初の値を手配したいアルファベット順に また、ここで私は名前コンボの大きなセットの答えを得たいと思っていました(2) – aman

+0

@akrunなぜですか?私にはほとんど同じように見える – Jaap

+1

@ジャップそれはない。あなたがもっと洗練を必要とするかどうか私に知らせてください。 前の質問で、soutionは "aman、akash、rudra"という名前のコードのすべての値を取得しました。ここではコードの最初の値wenはアルファベット順に整理されています。ここで私は以前に尋ねられた名前コンボの大きなセットの回答を得たいです。(2) – aman

答えて

1

私たちは、「名前」列を分割し、「コード」によってグループ化された「長い」形式(「DFN」)、それを再構築し、ランレングス-ID「のコード」のをするsplitstackshapeからcSplitを使用することができ、私たちpastesort ingの後の「名前」。 「DF2」と同じ操作を行い、データセットの両方でmatch「名前」列と「DF2」に新しい列「コード」を作成するために対応して「DFN」の「コード」を取得

library(splitstackshape) 
dfN <- cSplit(df, "Name", ",", "long")[, .(Name = paste(sort(Name), collapse=",")), 
      by = .(grp = rleid(Code), Code)] 
df2$grp <- seq_len(nrow(df2)) 
df2$code <- cSplit(df2, "Name", ",", "long")[, .(Name = paste(sort(Name), 
    collapse=",")), .(grp)][, dfN$Code[match(Name, dfN$Name)]] 
df2$grp <- NULL 
df2 
#    Name code 
#1 aman,akash,rudra ijk 
#2  Tushar,aman jkl 
#3   Kartik efg 
#4  rudra,akash ghi 
関連する問題