참고 :이 질문의 '데이터 프레임'은 실제로 행렬입니다. 대답은 여전히 의미가 있도록 나는 표현을 떠난, 그리고 솔루션은 모두 dataframes 및 행렬에서 작동하기 때문에데이터 프레임에서 숫자 목록에 가까운 값 검색
나는 대중과 해당 강도의 목록이 포함 된 dataframe 있습니다
> df <- cbind(c(3.43534, 5.324, 9.322, 123.234), c(31, 4214, 112, 44))
> colnames(df) <- c("Mass", "I")
> df
Mass I
[1,] 3.43534 31
[2,] 5.32400 4214
[3,] 9.32200 112
[4,] 123.23400 44
I을 내가 처음 안양에서 화합물을 식별 할 수 있도록하려는
> compounds <- cbind(c(3.39, 102.93, 9.310, 144.00), c("A", "B", "C", "D"))
> colnames(compounds) <- c("Mass", "Compound")
> compounds
Mass Compound
[1,] "3.39" "A"
[2,] "102.93" "B"
[3,] "9.31" "C"
[4,] "144" "D"
: 대중의 목록과 해당 화합물의 이름이 포함 된 다른 dataframe 있습니다. 질량이 정확하다면 이것은 매우 간단 할 것입니다. 그러나 실험적 오류로 인해 첫 번째 데이터 프레임의 질량은 '화합물'데이터 프레임의 질량과 숫자가 동일하지 않습니다.
화합물 데이터 프레임을 검색하여 첫 번째 df에서 1에 가까운 행을 모두 찾는 방법은 무엇입니까? 저를 줄 것 0.2의 허용 오차를 허용 예를 들어
Mass Compound
[1,] "3.39" "A"
[2,] "9.31" "C"
실제 수명 데이터 행의 수천, 그래서 불행하게도 루프가 너무 느린 것입니다.
tol <- 0.2
compounds[which(do.call(pmin,as.data.frame(abs(outer(compounds$Mass, df$Mass, "-")))) < tol),]
## Mass Compound
##1 3.39 A
##3 9.31 C
참고 :
들은 행렬이다 데이터 프레임이 아닙니다. –
죄송합니다. 올바른 답변입니다. 나는이 실수를했다. 왜냐하면 내가 사용하고있는 전체 데이터 세트는 data.frame이지만, aichao의 솔루션이 여전히 작동하기 때문이다. 지금 문구를 바꿀 것입니다. –