在数据处理中往往会碰到如下常见格式: 第一列为总称,后面多列都表示该总称名下各种细类。例如: 公交线路1 站点1 站点2 站点3 站点4
公交线路2 站点1 站点3 站点5 站点8
现提供一段R代码,可把这种短列表变成长列表: 公交线路1 站点1 公交线路1 站点2 公交线路1 站点3 公交线路1 站点4 公交线路2 站点1 公交线路2 站点3 公交线路2 站点5 公交线路2 站点8
############################################################################### #输入列表sourceData,该列表的第一列为起点,第二列及之后所有列,都是终点。 #例如 A 甲 乙 丙 丁 # B 甲 戊 庚 壬 #经过上述转换后,显示为 #A 甲 #A 乙 #A 丙 #A 丁 #B 甲 #B 戊 #B 庚 #B 壬 #即从第一列指向之后的所有列。 #忽略其中的空字符串部分 #该结果可粘帖到.txt文本中,供txt2pajek.exe生成.net文件用 makeLineNet<-function(sourceData) { resultData<-list(); rn<-length(sourceData); m<-1; for(i in 1:rn) { cn<-length(sourceData[]); for(j in 2:cn) { if(sourceData[][j]!="") { resultData[[m]]<-sourceData[][1]; resultData[[m]][2]<-sourceData[][j]; m<-m+1; } } } return(resultData); } ###############################################################################
当然,还有一些reshape2或plyr这样的R包可以有函数进行上述转换。
转载本文请联系原作者获取授权,同时请注明本文来自林枫科学网博客。
链接地址:http://blog.sciencenet.cn/blog-792243-803818.html
来自群组: ucinet长沙学习群 |