【问题标题】:read csv files and perform function, then bind together读取csv文件并执行功能,然后绑定在一起
【发布时间】:2015-01-08 18:06:21
【问题描述】:

我有多个 CSV 文件,我知道如何读取它们并重新绑定它们。但是我的问题是,在绑定它们之前,我想先执行一些动作,然后rbind。

所以对于一个文件,我会这样做:

a<-read.table(file="F:..... .csv", skip=1401, nrow=2,header=FALSE, sep=";")
head(a)
##display only some columns
G<-a[,c(11:13)]
H<-a[, c(14:16)]
names(G)<-names(H)
H_G<-as.data.frame(rbind(G, H))
##transpose to long format
H_G<-t(H_G)

现在我想从所有其他文件中重新绑定。

我用这个试过了

filenames <- list.files(path="F:....2",pattern="*.csv")
readlist <- lapply(filenames, read.table, skip=1401, nrow=2,header=FALSE, sep=";")

但是我没有得到我想要的结果。

【问题讨论】:

  • 未经测试但可能有帮助lapply(filenames, function(x) read.table(x, skip=1401, nrow=2,header=FALSE, sep=";")))

标签: r function csv rbind


【解决方案1】:

这段代码会做你想做的事

这里我初始化了一些测试矩阵:

a<-matrix(1:100,10)
b<-matrix(901:1000,10)
write.csv(file="test.csv",a)
write.csv(file="test2.csv",b)

我在这里执行你的循环:

filenames <- dir(pattern="*.csv")
for (i in c(1:length(filenames))){  
  print(filenames[i])
  assign(filenames[i],read.csv(filenames[i], header=FALSE))
  assign(filenames[i], get(filenames[i])[,8:10])
  if(i==1){output<-data.frame(matrix(vector(),10,0))}
  results<-rbind(output,get(filenames[i]))
  if(i==length(filenames)){output<-t(results)}
}

注意:我在这行assign(filenames[i], get(filenames[i])[,8:10]) 中所做的列号是任意的,您应该插入自己的。

如果您有任何问题或者这对您不起作用,请告诉我。 `

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 2020-02-03
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多