1、问题一,
如图1原始数据列,我想把数据列变成图2的格式,废了好大力气也没做完成,不过还好,最后能勉强用,以后改进。
2、解决办法
1)我很快想到用reshape2包中的数据列转换中长转宽dcast,但是,遗憾的是我发现只能转换其中一个变量,如此多的变量我不能一个个转换后再合并吧,工作量不小,以前也遇到过如此情况,经常逃避解决,今天,我选择了勇敢面对。一步步来吧。
2)我发现value.var可以赋值你想要的转换变量。然后我将我第一行所有的变量名赋值给colnameyieldc2。
colnameyieldc2 <- colnames(yieldc2);colnameyieldc2
colnameyieldc2[1]
dcast(yieldc2,site+N+D~V,value.var = colnameyieldc2[1])
3)这样貌似可以写个方程计算了,然后直接吧b(n),就得到了你想要的那个变量的转换。
b <- function(x) {
a <- dcast(yieldc2,site+N+D~V,value.var = colnameyieldc2[x])
return(a)
}
4)但是我懒,我想要一键就能得到的全部的转换,在此附上这篇文章给的启示,表示尊重。
R语言︱list用法、批量读取、写出数据时的用法
file=list() ###新建list文件
data.list<-list() ###新建list数据文件
xlsxfile=paste(colnameyieldc2,".xlsx",sep="") ###命名输出文件名
xlsxfile[1]
for (i in 1:22) {
data.list[[i]]<- b(i) ###赋值
file[[i]]=paste("C:/Users/alxh/Desktop/",xlsxfile[i],sep="") ###输出文件在桌面,
write.xlsx(data.list[[i]],file[[i]]) ###输出
}
5)至此,你会得到一堆excel文件在你的桌面,
6)批量导入excel文件,借用方法来自
R语言-基础操作(批量数据读取和输出)
path <- "C:/Users/alxh/Desktop/修改" ###文件路径
fileNames <- dir(path) ###提取所有文件名
fileNames ##查看
filePath <- sapply(fileNames, function(x){
paste(path,x,sep = '/')}) ####循环迭代输出所有文件路径
data <- lapply(filePath,function(x){
read.xlsx( x,1) ####循环迭代导入所有文件命名data,1表示sheet=1
})
> class(data)
[1] "list"
7).xlsx文件读取需要xlsx包(可能不太好装需要rJava配置),当然.csv更好个人觉得。
是否有更好的方法呢?欢迎评论。。。