个人认为学习R语言的一个很有效的方法就是去尝试用代码解决某个小问题。之前的文章《小提琴图的画法》介绍了两个绘制小提琴图的R包,但是二者所需的数据格式是两种不同的形式。而我们在平常作图过程中最常用的也就是这两种格式的数据(如下图)。 有童鞋就问:“有没有可以实现这两种格式数据转换的R脚本呢?” 作为一名R语言的初学者,我自己尝试写了一个R脚本,希望实现两种数据格式的转换。由于学习时间较短,代码有很多地方可能需要改进,先分享给大家一起讨论。 我的思路是先导入表格数据,然后判断是那种类型的表格,用 if 函数进行“分流”,利用for 循环以及rbind()和cbind()函数将列进行重接“拼接”,最后用write.table()函数导出新表格。最终希望实现在工作路径下的任意一种类型的表格自动转换成另一种类型表格的目标。下面是脚本和注释(为了方便大家逐步调试查看结果,每个赋值的变量都有“显示”): #首先,查看工作路径的txt数据表格(制表符分割) filelist<-dir(pattern>-dir(pattern> filelist #读取表格(这里只读取第一个) mydata<> mydata #获取变量名 val<> val # 获取变量数量 ,行数,变量水平等等,用于格式转换 m<> m col1<> col1 nf<-length(col1)>-length(col1)>#获取数据框所有的行数 nf col2<-levels(col1)>-levels(col1)>#变量的水平 col2 np<-length(col2)>-length(col2)>#变量的水平数 np nrow<-nf>-nf> nrow #获取表格的“特征”数据,用于判断导入表格的类型 testn<> testn test1<> test2<> test1 test2 test3<> test4<> test3 test4 #判断导入的表格是那种表格类型 if(test1==test2&test3==test4&m>=2){ test<-1 >-1 >#“单列型” }else if(test3!=test4&m>=2){ test<-2 >-2 >#“多列型” } test #“单列型”表格 转换为 “多列型”表格 if(test==1){ x1<> x1 p<> q<> for(i in 2:np){ p<> q<> x2<> x1<> } colnames(x1)=col2 x1 write.table(x1,file ='newtable_m.txt',sep='\t',col.names=NA,quote = FALSE)
}else if(test==2){ # “多列型”表格 转换为 “单列型”表格 x1<-data.frame(x=val[1],y=mydata[,1])>-data.frame(x=val[1],y=mydata[,1])># 将第1列转为数据框 x1 for(i in 2:m){ x2<> x1<> } x1 write.table(x1,file ='newtable_s.txt',sep='\t',col.names=NA,quote = FALSE) } x1
|
|