我有一个文件(矩阵)time
,其值为0到23小时。此文件可以读作:
conne1 <- file("/dat/file_time.bin","rb")
file_time<- readBin(conne1, numeric(), size=4, n=1000*500, signed=TRUE)
现在我有其他24 files
与time
具有相同的昏暗,可以完全读作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个文件中的相应值。
答案 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]
,第?"["
部分,第三种索引形式。