尝试使用R中的循环创建新变量,但失败了

时间:2015-07-22 16:14:03

标签: r

我是RI的新用户已使用下面的代码导入了我所有txt文件中的所有数据,但我想在导入数据时创建一个新变量,该变量称为case。案例的值为第一行是1,其余的是0.

当我尝试运行代码时,控制台没有说任何时候出错,数据已导入,但新变量未创建。我不知道为什么。

for(i in Filenames){
  perpos <- which(strsplit(i, "")[[1]]==".")
  data=assign(
    gsub(" ","",substr(i, 1, perpos-1)),
    read.table(paste(filepath,i,sep=""),fill=TRUE,header=TRUE,quote ="",row.names = NULL,sep="\t")
  )
  strsplit(i, "")
  filename  = strsplit(as.character(i),"\\.txt")
  data$case = ifelse(data$NAME=="filename",1,0)
} 

2 个答案:

答案 0 :(得分:1)

谢谢你们!我使用了@ joosts的代码并做了一些调整。下面的代码工作正常。

fn <- paste(filepath,Filenames,sep="")
mylist <- lapply(fn, read.table,fill = TRUE, header = TRUE, quote = "",row.names = NULL, sep = "\t",stringsAsFactors=FALSE)
for(i in 1:length(Filenames)){
mylist[[i]]<- cbind(mylist[[i]], case = 0)
if(nrow(mylist[[i]])>0) {
mylist[[i]]$case[1] <- 1
}
mylist[[i]]<- cbind(mylist[[i]], ID = i)
}
do.call(rbind, mylist) 

答案 1 :(得分:0)

我假设您要读取多个文本文件,每个文件包含相同的列(按相同顺序)。为了组合多个dataframe s(调用read.data()产生的结果),您应该调用函数rbind()。 我假设您的代码获取没有扩展名的文件名略微过于复杂......

for(file in filenames) {
 sanitized_filename <- gsub(" ", "", strsplit(file, "\\.")[[1]][1])
 file.frame <- read.table(paste(filepath, file, sep=""), fill = TRUE, header = TRUE, quote = "", row.names = NULL, sep = "\t")
 file.frame <- cbind(file.frame, name = I(sanitized_filename), case = 0)
 if(nrow(file.frame)>0) {
   file.frame$case[1] <- 1
 }
 data <- ifelse(exists("data"), rbind(data, file.frame), file.frame)
}