使用字符的字符串从细胞中一个数据帧来创建矢量(Use the string of character

2019-10-31 22:59发布

>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甚至更好

谢谢

Answer 1:

使用assign

varname <- "Experiment name : CONTROL DB AD_1"

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

你可以使用正则表达式和subgsub删除从字符串一些文字:

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

但让我提醒你,这是做一个不寻常的事情。

这里是龙。



Answer 2:

如果我理解正确的话,你有一大堆的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=TRUEheader=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)


文章来源: Use the string of characters from a cell in a dataframe to create a vector