2015-10-18 85 views
0

我正在與金融行業成員的員工歷史合作,並希望創建一個邊界列表以在Sankey Flow中對其進行可視化。到目前爲止,我的數據是逗號分隔的實體的字符串,像這樣:逗號分隔的字符串到邊界列表

A, B, D 
C, A, E, B 
F, B 

特別感興趣的是這些公司之一(稱之爲B公司爲例)。我需要把這些數據之上形成類似這樣的:

A, B 
B, D 
C, B 
A, B 
E, B 
F, B 

再次,重要的是在B公司,所以我需要一種方法來對因子識別具體而言,和處理字符串不同的長度。最後,我需要一個邊界列表,其中每行都有公司B,其中來自公司B周圍的公司的數據採用逗號分隔的字符串。

+1

歡迎SO!你有什麼嘗試過,沒有奏效?請參閱[如何製作一個很好的可重現問題](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – hrbrmstr

回答

0

有幾種方法可以做到,在R.這裏做,在基礎R的一種方式:

myc <-c("A,B,D","C,A,E,B","F,B") 
myc <-strsplit(myc,",") #split value on comma 

res <-lapply(myc,combn,2,simplify = FALSE) #create cominations 
out <-matrix(unlist(res),ncol=2,byrow=TRUE) #create dataframe of combinations 
out[colSums(apply(out,1,match,"B"),na.rm=TRUE)==1,] #keep only combinations with "B" 
    [,1] [,2] 
[1,] "A" "B" 
[2,] "B" "D" 
[3,] "C" "B" 
[4,] "A" "B" 
[5,] "E" "B" 
[6,] "F" "B" 
+0

這裏是一個略短的變化:'s < - unlist(lapply(myc,function(x)grep(「B」,combn(x,2,toString),value = TRUE))); read.table(text = s,sep =「,」,as.is = TRUE)'。如果輸出是以逗號分隔的字符串的形式出現的,則省略'read.table'行。 –