我是R和stackoverflow的新手,所以这可能会有一个非常简单的解决方案。
我有来自20个不同主题的一组数据。在将来,我将不得不对这些数据执行许多不同的操作,并且必须对所有单个集重复此操作。分别分析它们并重新组合它们。
我的问题是如何自动化这个过程:
P4 <- read.delim("P4Rtest.txt")
P7 <- read.delim("P7Rtest.txt")
P13 <- read.delim("P13Rtest.txt")
等等等。
我尝试使用for循环进行循环,但看到每次创建一个具有唯一名称的新data.frame时都会陷入困境。
感谢您的帮助
答案 0 :(得分:5)
执行此操作的R方法是将所有数据集保存在命名列表中。为此,您可以使用以下内容,其中n
是文件数。
nm <- paste0("P", 1:n) ## create the names P1, P2, ..., Pn
dfList <- setNames(lapply(paste0(nm, "Rtest.txt"), read.delim), nm)
现在dfList
将包含所有数据集。您可以使用dfList$P1
P1
,dfList$P2
P2
依次访问它们,依此类推。
答案 1 :(得分:0)
有很多不同的方法可以做这样的事情。您可以使用rbind
将所有数据合并到一个数据框中。这里的第一个答案有一个很好的方法:Replace rbind in for-loop with lapply? (2nd circle of hell)
如果将所有内容组合到一个数据框中,则需要添加标识参与者的列。而不是
P4 <- read.delim("P4Rtest.txt")
...
你会有像
这样的东西my.list <- vector("list", number.of.subjects)
for(participant.number in 1:number.of.subjects){
# load individual participant data
participant.filename = paste("P", participant, "Rtest.txt", sep="")
participant.df <- read.delim(participant.filename)
# add a column:
participant.df$participant.number = participant.number
my.list[[i]] <- participant.df
}
solution <- rbind(solution, do.call(rbind, my.list))
如果由于某种原因想要将它们保留为单独的数据框,可以将它们保留在列表中(不要使用最后rbind
行),并在需要对其进行操作时使用lapply(my.list, function(participant.df) { stuff you want to do })
数据框。
答案 2 :(得分:-2)
您可以使用assign
。假设您的所有文件都具有与您显示的格式相似的格式,这将适合您:
# Define how many files there are (with the numbers).
numFiles <- 10
# Run through that sequence.
for (i in 1:numFiles) {
fileName <- paste0("P", i, "Rtest.txt") # Creating the name to pull from.
file <- read.delim(fileName) # Reading in the file.
dName <- paste0("P", i) # Creating the name to assign the file to in R.
assign(dName, file) # Creating the file in R.
}
还有其他方法更快,更紧凑,但我发现它更易读,特别是对于R新手。
此外,如果您的数字不是像我在这里使用过的完整序列,您只需定义一个使用数字的向量,如:
numFiles <- c(1, 4, 10, 25)