2015-10-18 71 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'行。 –