这是一个较大的脚本的一部分 - 长话短说,输入到R是一个分号分隔的路径到我的文本文件的位置。所有文本文件都具有以下格式:
File1中:
Name1 3
Name2 4
Name3 55
文件2:
Name1 4
Name2 33
Name3 102
文件3:
Name1 12
Name2 2
Name5 33
以下是一个例子:
cond1<-'/User/Desktop/File1;/User/Desktop/File2;/User/Desktop/File3'
#separates the elements
normalList<-strsplit(cond1, ";")
#now you can access each element
nor<-unlist(normalList)
baseNorm<-vector("list", length(nor))
dirNorm<-vector("list", length(nor))
pathNorm<-vector("list", length(nor))
Norm<-vector("list", length(nor))
new<-vector("list", length(nor))
for (i in 1:length(nor))
{
baseNorm[[i]] <- basename(nor[i])
dirNorm[[i]]<-dirname(nor[i])
pathNorm[[i]]<-paste(dirNorm[[i]], baseNorm[[i]], sep="/")
Norm[[i]]<-read.delim(pathNorm[[i]], header=F)
}
在这里的示例中,R的输入包含3个文件 - 但是我需要脚本足够灵活,它可以适用于传递的任意数量的文件,因此尝试使用for循环。 BIG IDEA是: 1)获取所有文件的特定文件的路径。 2)将文本文件加载到R中 3)创建一个包含公共第一列(Name1,Name2,Name3)的新文件。此新文件中的所有下一列对应于File1,File2,File3,File4等的第二列。 基本上,我需要创建一个主文件:
Name1 3 4 55
Name2 4 33 102
Name3 12 2 33
我确信即使对于我已经拥有的代码,也有一个更简单的解决方案,因为所有[[]]我甚至不知道如何开始编写创建主文件的函数。我刚开始使用R,所以任何输入都是宝贵的学习经历,并提前感谢您!
答案 0 :(得分:3)
这样的事情? :
fileNames <- list.files()
master1 <- read.csv(file = fileNames[1], sep = ";", header = T)
for(i in 2:length(fileNames)){
file1 <- read.csv(file = fileNames[i], sep = ";", header = T)
master1$newCol1 <- file1[,2]
colnames(master1)[ncol(master1)] <- paste("file",i,sep = "")
}
答案 1 :(得分:1)
我意识到我可能有点模糊。这是一些可能有用的半伪代码。
my.files <- list.files(pattern = ".csv")
imported.files <- sapply(my.files, read.csv, ...) # additional paramaters for proper import
out <- do.call("cbind", imported.files)