2013-03-15 33 views
-4

我有一个文本文件,它看起来像下面从字符串获取值的列标题中的R

DateTime    height0.1    height0.2 
2009-01-01 00:00   1      1 
2009-01-02 00:00   2      4 
2009-01-03 00:00   10     1 

显然,这只是一个例子,实际的文件中包含了更多的数据,即包含约100列,并且标题可以具有小数点的值。我可以通过以下方式将文件读入R:

dat <- read.table(file,header = TRUE, sep = "\t") 

其中file是表的路径。这会在名为dat的工作区中创建一个data.frame。现在我想从这个data.frame中生成一个名为'vars'的变量,它是由列标题中的数字组成的数组(除了来自第一列的DateTime外)。

例如,这里我会瓦尔= 1,2

基本上我想采取是标题的字符串中的数,然后存储此在一个单独的变量。我意识到这对某些人来说非常容易,但任何建议都会很棒。

+3

是否这样? 'my_var < - as.numeric(gsub(“[^ 0-9]”,“”,names(dat)[2:3]))' – Arun 2013-03-15 12:00:11

+0

@Arun为什么不作为回答? – 2013-03-15 12:01:27

+1

@ SimonO101,在这些问题中,总有一个“catch”。看到我的答案评论。 – Arun 2013-03-15 12:09:07

回答

2

如果所有的号码,你一直都在名字的结尾,例如,不喜欢h984mm19,那么,你可以删除一切,除了使用gsub数字和标点符号并将其转换为numeric矢量如下:

# just give all names except the first column 
my_var <- as.numeric(gsub("[^0-9[:punct:]]", "", names(dat)[-1])) 
# [1] 0.1 0.2 
+0

如果数字是0.1和0.2,我认为这不会起作用。而且如果数据框中有多于3列的话。你能提供一个更通用的答案吗? – Emma 2013-03-15 12:06:57

+0

好吧,你的问题没有提及任何关于'0.1'的问题。编辑您的帖子以反映可能性,然后我将进行编辑。 – Arun 2013-03-15 12:08:21

+0

@ user1155751这就是为什么给你的问题的具体要求是一个好主意...... – alexwhan 2013-03-15 12:08:29