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