>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”,或者,如果可能的控制DB AD_1甚至更好
谢谢
使用assign
:
varname <- "Experiment name : CONTROL DB AD_1"
assign(varname, 3.14158)
get("Experiment name : CONTROL DB AD_1")
[1] 3.14158
你可以使用正则表达式和sub
或gsub
删除从字符串一些文字:
cleanVarname <- sub("Experiment name : ", "", varname)
assign(cleanVarname, 42)
get("CONTROL DB AD_1")
[1] 42
但让我提醒你,这是做一个不寻常的事情。
这里是龙。
如果我理解正确的话,你有一大堆的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=TRUE
或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
去拿那些龙。
更新
如果您的数据都是相同的格式,你可以使用lapply
通过Andrie与此函数一起提到的解决方案。 只是让要加载的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)