|||
在数据处理中往往会碰到如下常见格式:
第一列为总称,后面多列都表示该总称名下各种细类。例如:
公交线路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[[i]]);
for(j in 2:cn)
{
if(sourceData[[i]][j]!="")
{
resultData[[m]]<-sourceData[[i]][1];
resultData[[m]][2]<-sourceData[[i]][j];
m<-m+1;
}
}
}
return(resultData);
}
###############################################################################
当然,还有一些reshape2或plyr这样的R包可以有函数进行上述转换。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-23 11:05
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社