2017-06-05 51 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 

我要搜索代碼下面DF

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

得到以下結果

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

請注意「樓陀羅,阿卡什」且發生的康寶R三大倍,在這種情況下它返回的結果alphabatical的代碼順序

讓我知道是否有某種方式來實現這一目標。

+1

@RonakShah創建一個新的列「代碼」兩列真實的數據集非常大。這僅僅是一個樣本集... 所以在前面的問題,soution是導致獲得的用於其名稱由「阿曼,阿卡什,陀羅」 在這裏,我想安排代碼文的只有第一個值的代碼的所有值按字母順序排列 也,在這裏,我希望得到的答案大集名稱的連擊則以前問(2) – aman

+0

@akrun爲什麼不呢?看起來幾乎與我一樣 – Jaap

+1

@Jaap它不是。 Iam再次重複我自己。讓我知道你是否需要更多的侵權 在上一個問題中,soution導致獲得所有代碼的名稱由「aman,akash,rudra」組成,在這裏我只想得到代碼的第一個值文按字母順序排列也,在這裏,我希望得到的答案大集名稱的連擊則以前問(2) – aman

回答

1

我們可以用cSplitsplitstackshape分裂「名稱」欄中,它重塑爲「長」格式(「DFN」),通過「代碼」進行分組,並運行長度ID「代碼」,我們paste '名字'在sort之後。這樣做與「DF2」,match「名稱」數據集中,並得到了「守則」中「DFN」對應於「DF2」

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