2017-09-18 1 views
0

을 기반으로 벡터의 최소. 유일한 옵션이 아니면 0과 NA를 제외해야합니다.R - 나는 최소 열 <code>ORG NAME</code>, <code>Inquiry</code>의 <code>LCP</code> 및 <code>ARNR</code>를 식별하는 열 <code>Min/NotMin</code>을 추가 할 여러 조건

예를 들어, 다음과 같아야합니다

ORG NAME Inquiry ARNR Quantity LCP  COGS  Min/NotMin 
BCA   22245 1001167 304   31.621 96.12784 NotMin 
BCA   22245 1001167 304   37.675 114.532  NotMin 
BCA   22245 1001167 304   0  0   NotMin 
BCA   22245 1001167 304   NA  0   NotMin 
BCA   22245 1001167 304   0  0   NotMin 
BCA   22245 1001167 304   144.915 440.5416 NotMin 
BCA   22245 1001167 304   NA  0   NotMin 
BCA   22245 1001167 304   NA  0   NotMin 
BCA   22245 1001167 304   39.381 119.71824 NotMin 
BCA   22245 1001167 304   27.014 82.12256 Min 
BIP   22188 1003771 100   1.394 1.394  NotMin 
BIP   21729 1004077 236278  0  0   NotMin 
BIP   21729 1004077 236278  NA  0   NotMin 
BIP   21729 1004077 236278  1.52 3591.4256 NotMin 
BIP   21729 1004077 236278  0  0   NotMin 
BIP   21729 1004077 236278  NA  0   NotMin 
BIP   21729 1004077 236278  3.848 9091.97744 NotMin 
BIP   21729 1004077 236278  0.713 1684.66214 Min 
BIP   21729 1004077 236278  1.837 4340.42686 NotMin 
BIP   21729 1004077 236278  0  0   NotMin 
BCA   21777 1004271 3000  3.057 91.71  Min 
BCA   21777 1004271 3000  0  0   NotMin 
BCA   21777 1004271 3000  3.848 115.44  NotMin 
BIP   21981 1004387 100   0  0   Min 
BCA   22204 1008463 125000  12.636 15795  NotMin 
BCA   22204 1008463 125000  8.67 10837.5  Min 
BCA   21732 1008463 125000  13.321 16651.25 NotMin 
BCA   21732 1008463 125000  0  0   NotMin 
BCA   21732 1008463 125000  8.034 10042.5  Min 
BCA   21732 1008463 125000  NA  0   NotMin 

당신이 도와 수 있기를 바랍니다! 감사!

+0

"ORG 이름, 문의 및 ARNR 열의 최소 LCP 식별"이라는 의미를 설명 할 수 있습니까? – jruf003

+0

@ alexb523 도움이되고 도움이된다면 답을 받아 들일 수 있습니까? – Santosh

답변

1

다음은 해결책입니다. 이렇게하려면 data.tablewhich 함수를 사용했습니다.

# Assuming DF is your input data frame 
# Replace 0 with NA since you would like to exclude 0's 
DF$LCP[DF$LCP == 0] <- NA 

# Creating a Min/NotMin column with default value 'NotMin' 
DF$MinOrNotMin <- "NotMin" 

# Getting minimum by ORG NAME, Inquiry, ARNR and their index 
library(data.table) 
DT <- data.table(DF) 
MinDF <- DT[, .SD[which.min(LCP),], by = list(ORG_NAME, Inquiry, ARNR)] 
index_DF <- which(outer(DF$ORG_NAME, MinDF$ORG_NAME, "==") & 
       outer(DF$Inquiry, MinDF$Inquiry, "==") & 
       outer(DF$ARNR, MinDF$ARNR, "==") & outer(DF$LCP, MinDF$LCP, "==") , 
       arr.ind=TRUE) 

# Writing "Min" in Min/NotMin column for minimum value 
DF$MinOrNotMin[index_DF[,1]] <- "Min" 

## Your final Output 
## DF 
ORG_NAME Inquiry ARNR  Quantity LCP  COGS  MinOrNotMin 
    BCA 22245 1001167  304 31.621 96.12784  NotMin 
    BCA 22245 1001167  304 37.675 114.53200  NotMin 
    BCA 22245 1001167  304  NA  0.00000  NotMin 
    BCA 22245 1001167  304  NA  0.00000  NotMin 
    BCA 22245 1001167  304  NA  0.00000  NotMin 
    BCA 22245 1001167  304 144.915 440.54160  NotMin 
    BCA 22245 1001167  304  NA  0.00000  NotMin 
    BCA 22245 1001167  304  NA  0.00000  NotMin 
    BCA 22245 1001167  304 39.381 119.71824  NotMin 
    BCA 22245 1001167  304 27.014 82.12256   Min 
    BIP 22188 1003771  100 1.394  1.39400   Min 
    BIP 21729 1004077 236278  NA  0.00000  NotMin 
    BIP 21729 1004077 236278  NA  0.00000  NotMin 
    BIP 21729 1004077 236278 1.520 3591.42560  NotMin 
    BIP 21729 1004077 236278  NA  0.00000  NotMin 
    BIP 21729 1004077 236278  NA  0.00000  NotMin 
    BIP 21729 1004077 236278 3.848 9091.97744  NotMin 
    BIP 21729 1004077 236278 0.713 1684.66214   Min 
    BIP 21729 1004077 236278 1.837 4340.42686  NotMin 
    BIP 21729 1004077 236278  NA  0.00000  NotMin 
    BCA 21777 1004271  3000 3.057 91.71000   Min 
    BCA 21777 1004271  3000  NA  0.00000  NotMin 
    BCA 21777 1004271  3000 3.848 115.44000  NotMin 
    BIP 21981 1004387  100  NA  0.00000  NotMin 
    BCA 22204 1008463 125000 12.636 15795.00000  NotMin 
    BCA 22204 1008463 125000 8.670 10837.50000   Min 
    BCA 21732 1008463 125000 13.321 16651.25000  NotMin 
    BCA 21732 1008463 125000  NA  0.00000  NotMin 
    BCA 21732 1008463 125000 8.034 10042.50000   Min 
    BCA 21732 1008463 125000  NA  0.00000  NotMin 

P. 열 ORG NAME, InquiryARNR에 대해 한 행만 있으므로 12 번째 행 BIP 22188 1003771 100 1.394 1.394 NotMin은 최소가되어야합니다.

+0

수정과 함께이 솔루션을 사용했습니다. 'index_DF' 부분을 구현할 때'오류 : 크기가 32.0 Gb 인 벡터를 할당 할 수 없습니다. '오류가 발생했습니다. 내가 틀렸다면 알려주지 만, 'MinDF' 부분에 도우미 열을 추가 한 다음 원래 열의 데이터 프레임을 병합하면 생각 나는 것을 얻을 수 있다고 생각합니다. – alexb523

+0

이 오류는 메모리와 관련이 있습니다. R은 작동을 위해 가상 메모리 (RAM)를 사용합니다. data.table이 크고 메모리 용량을 초과하는 'index_DF'가있는 것 같습니다. 당신의 접근 방식에 동의합니다. 나는'index_DF'가 필요 없다고 생각합니다. 'MinDF'를위한 헬퍼 인덱스를 추가하고, 간단히'merge'와 헬퍼 인덱스를 기반으로'subset'을 추가 할 수 있습니다. – Santosh

관련 문제