0
하나의 행렬 (data1)에 값을 사용하여 두 번째 행렬 (data2)을 더 작은 행렬 (foo)로 서브 세트하는 방법을 결정합니다. 그러나 나는 foo의 크기를 미리 알 수있는 방법이 없기 때문에 문제가 발생합니다.R : for 루프를 사용하여 길이를 알 수없는 행렬 subset을
여기 MWE가 있습니다 (실제 데이터 구조체는 100,000+ 행 길이입니다).
data1 <- rbind(c(102,250,'stim1'),c(477,839,'stim2'))
data2 <- rbind(c(99,'xx'),c(105,'yy'),c(230,'zz'),c(312,'aa'),c(587,'bb'),c(846,'cc'))
foo <- NULL
for(i in 1:nrow(data1))
{
foo[i,1] <- subset(data2,as.numeric(data2[,1]) > as.numeric(data1[i,1]) & as.numeric(data2[,1]) < as.numeric(data1[i,2]))
foo[i,2] <- rep.int(data1[i,3],nrow(subset(data2,as.numeric(data2[,1]) > as.numeric(data1[i,1]) & as.numeric(data2[,1]) < as.numeric(data1[i,2]))))
}
I는 다음과 같이 할 foo는 싶습니다
105 yy stim1
230 zz stim1
587 bb stim2
, 데이터가 데이터 유형을 하나 이상 포함 된 경우 행렬을 사용하지 않는 , 여기 정수와 문자. data.frames를 사용해야합니다. – flodel
죄송합니다, 원본은 데이터 프레임입니다 ... 나는 방금 MWE에서 그 작업을 수행하지 않았습니다. – sheepskin
여기에 몇 가지 문제가 있습니다 : (1)'data1'과'data2'는 숫자 프레임이 숫자가 될 수 있고 문자가 아닐 수 있도록 데이터 프레임이어야합니다. (2)'foo [i, 1]'을 할당하는 함수는 행렬을 반환하지만'foo [i, 1]'은 단일 값입니다. 필자의 제안은'foo'는 행렬이 아닌'행렬 목록 '이어야한다는 것입니다. 그렇게하면 어쨌든 얼마나 큰지 알 필요가 없습니다. –