1

私はこれを個別に行う方法を知っています。しかし、私は1000以上のファイルを持っています。forループを使用することにしました。しかし、変数を評価する正しい方法が見つからなかったようです。

これが私のコードです

setwd('C:/data')
filenames=dir() #find file names

for (i in filenames){
  adt = substr(x = i, start = 1, stop = nchar(i)-4)
  name=paste("data_", adt, sep="")
  assign(name, read.csv(i,header=T,sep=",")) #read each file and assign a variable name starting with data_ to it
  func=paste('name[is.na(name)] <- 0',sep="") # here is the place I have problem. R will not consider name is a parameter whose values change in each iteration
  eval((text=func))

  }
4

2 に答える 2

1
library(plyr)
# change the pattern to match whatever file type you are reading
filenames <- list.files(path = ".", pattern = ".csv", all.files = FALSE, 
full.names = FALSE, recursive = FALSE, ignore.case = FALSE)
data <- llply(filenames, read.csv)
cleaned_data <- llply(data, function(x)  {x[is.na(x)] <- 0; return(x)})
names(cleaned_data) <- paste0("data_", 1:length(cleaned_data))
于 2012-09-15T21:26:04.640 に答える
1

の結果を一時変数に割り当て、 sをread.csv置き換えてから、に割り当てることができます。NAname

for (i in filenames){
  adt = substr(x = i, start = 1, stop = nchar(i)-4)
  name=paste("data_", adt, sep="")
  tmp <- read.csv(i, header=TRUE, sep=",")
  tmp[is.na(tmp)] <- 0
  assign(name, tmp, pos=.GlobalEnv)
}
于 2012-09-15T21:06:43.013 に答える