2017-12-18 16 views
1

私はWOの値 "K"と "B"を持つことができるRのデータセットを作成しています。 WOの周波数が "K"レコードと "B"レコードの間で一致しない場合、WOを返すようにします。たとえば、次の表:頻度カウントが一致しないリターンレコード

See table

df <- structure(list(WO = c(917595L, 917595L, 1011033L, 1011033L), 
    Invoice = c("B", "K", "B", "K"), freq = c(3L, 6L, 2L, 2L)), 
    .Names = c("WO", "Invoice", "freq"), 
    class = "data.frame", row.names = c(NA, -4L) 
) 

私は3 6.等しいしかし、1011033は、その周波数が一致したため、返されるべきはありませんので、917595を返したいです

+0

917595の頻度は、K、Bレコード間で異なります。それが返されるか返されませんか?しかし、その頻度が*一致するため、1011033が返されたかったとします。私は混乱しています... – smci

答えて

0

データの形状を変更すると、頻度の値が比較されます。

library(dplyr) 
library(reshape2) 

dframe <- 
    "WO,Invoice,freq 
917595,B,3 
917595,K,6 
1011033,B,2 
1011033,K,2" %>% 
    read.csv(text = ., 
      stringsAsFactors = FALSE) 

    dcast(dframe, 
     WO ~ Invoice, 
     value.var = "freq") %>% 
    filter(B != K) 
+0

ありがとう、私は約60,000のレコードを持って、データフレームとして、上記のコードは同じ動作しますか?ありがとうございました。 –

+0

データが、提供したサンプルデータと同じ構造になっている場合は、問題ではありません。 – Benjamin

+0

返された値が私にWOを与えていません。私は最初に指標だったが、そうではありません。 –

0

我々はduplicated

df1[!(duplicated(df1[c(1, 3)])|duplicated(df1[c(1,3)], fromLast = TRUE)),] 
#  WO Invoice freq 
#1 917595  B 3 
#2 917595  K 6 

それとも別のオプション「WO」と「FREQ」でunique要素のif数がより多いチェックして、グループにあるを使用してbase Rでそれを行うことができます1

library(data.table) 
setDT(df1)[, if(uniqueN(freq)>1) .SD, WO] 
#  WO Invoice freq 
#1: 917595  B 3 
#2: 917595  K 6 
関連する問題