【问题标题】:Add columns within a for loop R在 for 循环 R 中添加列
【发布时间】:2013-03-21 23:05:06
【问题描述】:

这是一个更大的脚本的一部分——长话短说,输入到 R 是一个分号分隔的路径到我的文本文件的位置。所有文本文件的格式如下:

文件1:

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 循环。大想法是: 1)获取所有文件的特定文件的路径。 2) 将文本文件加载到 R 3) 创建一个包含公共第一列(Name1、Name2、Name3)的新文件。这个新文件中的所有下一个列对应于 File1、File2、File3、File4 等的第 2 列。 本质上,我需要创建一个主文件:

Name1   3   4   55
Name2   4   33  102
Name3   12  2   33

我确信即使对于我已经拥有的代码,也有一个更简单的解决方案,因为对于所有 [[]],我什至不知道如何开始编写创建主文件的函数。我刚开始使用 R,所以任何输入都是宝贵的学习经验,在此先感谢您!

【问题讨论】:

  • list.files(参见参数模式),lapplydo.call 是关键字。

标签: r


【解决方案1】:

这样的?? :

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 = "")
}

【讨论】:

  • 为什么不使用[[ 而不是$,那你就不用乱搞colnames&lt;-
  • 我不熟悉'[['。它有什么作用?
  • ?"[[" -- 和library(fortunes);fortune(312)
  • 谢谢,我不知道。在处理显式命名列表时,我只使用了双括号(如果我理解正确的话,data.frames 是一种列表类型)。在上面的例子中你会如何使用'[['?
  • 一个data.frame是一个命名列表master1[[paste("file",i,sep = "")]] &lt;- file1[,2]
【解决方案2】:

我意识到我可能有点含糊。这里有一些半伪代码可能会有所帮助。

my.files <- list.files(pattern = ".csv")
imported.files <- sapply(my.files, read.csv, ...) # additional paramaters for proper import
out <- do.call("cbind", imported.files)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2020-08-12
    • 2015-01-25
    • 1970-01-01
    • 2011-10-02
    • 2015-01-29
    • 2020-08-20
    相关资源
    最近更新 更多