我必须从与多个实验相关的文件中加载数据,而后者则处理这些数据以生成一个图。每个实验产生多个文件。与实验1相关的文件名为"Experiment1“,然后按其包含的数据类型发布,即“实验1-每0”,“实验1-每50”,“实验1-每100”。
对于所有实验,这些后缀是固定的。因此,为了加载这些文件,我只想给出实验名称,而后者在R-脚本中附加这些后缀。因此,对于我给出的每个实验名称"ExperimentX“,我将通过追加后缀来加载三个单独的数据文件(即"ExperimentX-per0”、"ExperimentX-per50“、"ExperimentX-per100")。
我无法确定,我应该在哪种数据结构中存储初始的实验名称,然后存储固定的名称.
样本文件(实验1-per50):
# the last column also shows the type of data i.e postfix of file
Obj TGiven TUsed TOGiven TOServed per50
16570 8 7 12 6 per50
18430 8 8 12 9 per50
16890 8 7 12 9 per50
目前,我把每个文件名,手动,这需要很多时间。
发布于 2013-04-09 15:46:27
如果每个实验都有相同的后缀集,则可以分别存储实验名称和后缀名称的列表。然后,使用嵌套循环,可以使用paste
函数组合实验名称和后缀名来获取文件名。
您的代码可能如下所示:
experiments = c("Experiment1","Experiment2","Experiment3")
suffixes = c("per0","per50","per100")
for (experiment in experiments) {
for (suffix in suffixes) {
filename <- paste(experiment, suffix, sep="-")
df <- read.table(filename)
df$experiment <- experiment
# Do something with the dataframe here
}
}
或者,如果您只想要一个来自给定experiments
和suffixes
列表的所有文件名的向量,这将将它们组合在一起:
as.vector(sapply(experiments, paste, suffixes, sep="-"))
发布于 2013-04-09 16:16:40
如果所有列都是不同的
如果两个实验之间的列是不同的,我将按如下所示将实验封装在列表中:
library(plyr);
experiments <- c("Experiment1","Experiment2","Experiment3");
suffixes <- c("per0","per50","per100");
# if you want to go ahead and get the data
data <- llply( experiments, function(experiment) {
llply( suffixes, function(suffix) {
fn <- str_c(experiment,'_',suffix,'.csv'); # make filename
# later, try to read fn, now just return
return(fn);
})
})
然后,您可以遍历data
以进行进一步的处理。llply
是plyr
包的一部分。它迭代一个列表(llply
中的第一个l
)并返回一个列表(第二个l
)。
如果所有列都是相同的
library(plyr);
experiments <- c("Experiment1","Experiment2","Experiment3");
suffixes <- c("per0","per50","per100");
data <- ldply( experiments, function(experiment) {
ldply( suffixes, function(suffix) {
data.frame(
experiment = experiment,
suffix= suffix,
fn = str_c(exper.name,'_',suffix,'.csv'))
})
})
这将将所有数据读取为单个data.frame
,然后您可以根据需要解析这些数据(例如,使用plyr
和/或subset
)。
https://stackoverflow.com/questions/15906031
复制相似问题