0
>titletool<-read.csv("TotalCSVData.csv",header=FALSE,sep=",")

> class(titletool)
[1] "data.frame"

>titletool[1,1]
[1] Experiment name : CONTROL DB AD_1

>t<-titletool[1,1]

>t
[1] Experiment name : CONTROL DB AD_1

>class(t)
[1] "character"

现在我想创建一个名为“实验名称:CONTROL DB AD_1”的对象(向量),或者如果可能的话更好的是 CONTROL DB AD_1

谢谢

4

2 回答 2

1

Use assign:

varname <- "Experiment name : CONTROL DB AD_1"

assign(varname, 3.14158)
get("Experiment name : CONTROL DB AD_1")
[1] 3.14158

And you can use a regular expression and sub or gsub to remove some text from a string:

cleanVarname <- sub("Experiment name : ", "", varname)
assign(cleanVarname, 42)
get("CONTROL DB AD_1")
[1] 42

But let me warn you this is an unusual thing to do.

Here be dragons.

于 2012-07-17T15:21:00.890 回答
1

如果我理解正确,您有一堆 CSV 文件,每个文件中都有多个实验,以“实验 ...”模式命名。您现在想以一种有效的方式将这些“实验”中的每一个读入 R。

这是一个不那么漂亮(但也不那么难看)的函数,它可能会让你朝着正确的方向开始。

该函数的基本作用是读取 CSV,识别每个新实验开始的行号,获取实验的名称,然后执行循环以使用单独的数据框填充列表。不过,命名“R 友好”并不真正麻烦,而且我决定将输出保留在列表中,因为正如 Andrie 指出的那样,“R 有很好的工具来处理列表。”

read.funkyfile = function(funkyfile, expression, ...) {
  temp = readLines(funkyfile)
  temp.loc = grep(expression, temp)
  temp.loc = c(temp.loc, length(temp)+1)
  temp.nam = gsub("[[:punct:]]", "", 
                  grep(expression, temp, value=TRUE))
  temp.out = vector("list")

  for (i in 1:length(temp.nam)) {
    temp.out[[i]] = read.csv(textConnection(
                             temp[seq(from = temp.loc[i]+1,
                             to = temp.loc[i+1]-1)]),
                             ...)
    names(temp.out)[i] = temp.nam[i]
  }
  temp.out
}

这是一个示例 CSV 文件。将其复制并粘贴到文本编辑器中,并将其保存为当前工作目录中的“funkyfile1.csv”。(或者,从 Dropbox 中读取:http: //dl.dropbox.com/u/2556524/testing/funkyfile1.csv

"Experiment Name: Here Be",,
1,2,3
4,5,6
7,8,9
"Experiment Name: The Dragons",,
10,11,12
13,14,15
16,17,18

这是第二个 CSV。同样,复制粘贴并将其保存为“funkyfile2.csv”在您当前的工作目录中。(或者,从 Dropbox 中读取:http: //dl.dropbox.com/u/2556524/testing/funkyfile2.csv

"Promises: I vow to",,
"H1","H2","H3"
19,20,21
22,23,24
25,26,27
"Promises: Slay the dragon",,
"H1","H2","H3"
28,29,30
31,32,33
34,35,36

请注意,funkyfile1没有列名,而funkyfile2有。这就是...函数中的参数的用途:指定header=TRUEor header=FALSE。此外,标识每组新数据的“表达式”是funkyfile2.

现在,使用以下功能:

read.funkyfile("funkyfile1.csv", "Experiment", header=FALSE)
# read.funkyfile("http://dl.dropbox.com/u/2556524/testing/funkyfile1.csv",
#                "Experiment", header=FALSE) # Uncomment to load remotely
# $`Experiment Name Here Be`
# V1 V2 V3
# 1  1  2  3
# 2  4  5  6
# 3  7  8  9
# 
# $`Experiment Name The Dragons`
# V1 V2 V3
# 1 10 11 12
# 2 13 14 15
# 3 16 17 18

read.funkyfile("funkyfile2.csv", "Promises", header=TRUE)
# read.funkyfile("http://dl.dropbox.com/u/2556524/testing/funkyfile2.csv",
#                "Experiment", header=TRUE) # Uncomment to load remotely
# $`Promises I vow to`
# H1 H2 H3
# 1 19 20 21
# 2 22 23 24
# 3 25 26 27
# 
# $`Promises Slay the dragon`
# H1 H2 H3
# 1 28 29 30
# 2 31 32 33
# 3 34 35 36

去拿那些龙。

更新

如果你的数据都是相同的格式,你可以使用lapplyAndrie 提到的解决方案和这个函数。只需列出您要加载的 CSV,如下所示。请注意,所有文件都需要使用与当前编写函数的方式相同的“表达式”和其他参数....

temp = list("http://dl.dropbox.com/u/2556524/testing/funkyfile1.csv", 
            "http://dl.dropbox.com/u/2556524/testing/funkyfile3.csv")
lapply(temp, read.funkyfile, "Experiment", header=FALSE)
于 2012-07-17T20:03:49.070 回答