首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应该使用哪种数据结构,可以以自定义的方式追加?

应该使用哪种数据结构,可以以自定义的方式追加?
EN

Stack Overflow用户
提问于 2013-04-09 15:25:50
回答 2查看 81关注 0票数 4

我必须从与多个实验相关的文件中加载数据,而后者则处理这些数据以生成一个图。每个实验产生多个文件。与实验1相关的文件名为"Experiment1“,然后按其包含的数据类型发布,即“实验1-每0”,“实验1-每50”,“实验1-每100”。

对于所有实验,这些后缀是固定的。因此,为了加载这些文件,我只想给出实验名称,而后者在R-脚本中附加这些后缀。因此,对于我给出的每个实验名称"ExperimentX“,我将通过追加后缀来加载三个单独的数据文件(即"ExperimentX-per0”、"ExperimentX-per50“、"ExperimentX-per100")。

我无法确定,我应该在哪种数据结构中存储初始的实验名称,然后存储固定的名称.

样本文件(实验1-per50):

代码语言:javascript
运行
复制
# 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

目前,我把每个文件名,手动,这需要很多时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-09 15:46:27

如果每个实验都有相同的后缀集,则可以分别存储实验名称和后缀名称的列表。然后,使用嵌套循环,可以使用paste函数组合实验名称和后缀名来获取文件名。

您的代码可能如下所示:

代码语言:javascript
运行
复制
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
  }
}

或者,如果您只想要一个来自给定experimentssuffixes列表的所有文件名的向量,这将将它们组合在一起:

代码语言:javascript
运行
复制
as.vector(sapply(experiments, paste, suffixes, sep="-"))
票数 2
EN

Stack Overflow用户

发布于 2013-04-09 16:16:40

如果所有列都是不同的

如果两个实验之间的列是不同的,我将按如下所示将实验封装在列表中:

代码语言:javascript
运行
复制
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以进行进一步的处理。llplyplyr包的一部分。它迭代一个列表(llply中的第一个l)并返回一个列表(第二个l)。

如果所有列都是相同的

代码语言:javascript
运行
复制
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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15906031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档