如何提取与文件名中的数字相对应的值?

时间:2015-07-07 12:26:29

标签: r

我有一个文件(矩阵)time,其值为0到23小时。此文件可以读作:

  conne1 <- file("/dat/file_time.bin","rb")
  file_time<- readBin(conne1, numeric(), size=4,  n=1000*500, signed=TRUE)

现在我有其他24 filestime具有相同的昏暗,可以完全读作time

dir1=list.files("/data/files", "*.bin", full.names = TRUE)
for(i in 1:length(dir1)){
readBin(dir1[i], numeric(), size = 4 ,n = 1000 * 500 , signed = T)
……………}

这24个文件的名称如下:

File1_00.bin;File1_01.bin;.....Until......File1_23.bin

我需要的只是开始阅读time中的值,例如,如果time中的值为12,请转到dir1中名为File1_12.img的文件,提取相应的值等。最后,我有一个文件,如time,但它有24个文件中的相应值。

1 个答案:

答案 0 :(得分:2)

无法复制,但我会尝试以下方式,假设我明白了你想要的东西:

declare @t table(c varchar(100))
insert into @t (c) values 
(' Hello | World | 40'),
('Hi | World | 24244'), 
('One | Two |  27    '),
('This | That | 84f '), 
('Yes | No | 456gf  '), 
('The | Test|54     ') 

select charindex('|', c, charindex('|', c, 0) + 1), charindex('|', c, 0) from @t
select * from @t where isnumeric(substring(c, charindex('|', c, charindex('|', c, 0) + 1) + 1, len(c))) = 1

进行测试:

 #read all the files and store in a matrix
 allContent<-do.call(cbind,lapply(dir1,
                           function(x) readBin(x, numeric(), size = 4 ,n = 1000 * 500 , signed = T)))
 #subset allContent to get the desired values
 allContent[cbind(1:(1000*500),file_time+1)]

最后一行编辑解释最后一行。您可以通过提供两列矩阵来对 #create the file time sampling randomly between 0 and 23 set.seed(1234) n<-1383 * 586 file_time<-runif(n,0,23) #creating an n x 24 matrix with values between 0 and 9999 allContent<-matrix(runif(n*24,0,9999),ncol=24) #subsetting allContent[cbind(1:n, file_time + 1)] 进行子集化,其中每行表示要采用的元素。在我的行中,matrix形成一个矩阵,其第一行由1创建,第一行为cbind(1:n, file_time + 1),第二行为2,第二行为file_time,依此类推。由于file_time的每一列都是第i个文件的内容,因此我说输出的第一个值必须是allContent列的第一个值,依此类推。

如果我不够清楚,你可以选择file_time[1],第?"["部分,第三种索引形式。