簡體   English   中英

dplyr 唯一行 sample_n

[英]dplyr unique rows sample_n

我正在嘗試根據組為相對較大的數據框獲取隨機樣本。 我只需要為每個組成員獲得唯一的結果 - 我不能為單個成員或整體獲得重復的結果。

我已經成功地將此代碼用於小樣本:

    processors2 <- processors%>%filter(str_detect(Person.Who.Changed.Object, "A0")) %>% 
      group_by(User)%>% sample_n(., 2)

但是,如果我使用下面類似的代碼,我會在組內和整體上得到多個重復項(即成員 1 和成員 3 獲得同一行數據,成員 1 獲得 2 個完全不同的行)。

claimallocator2 <- claimallocator%>%
  group_by(User)%>% sample_n(80, weight = Claim.Amt)

此外,如果我添加 replace = FALSE 也沒有區別。 我仍然得到重復。

預期輸出(顯然規模小得多):

User    Warranty.Claim  Claim.amt
User 1  1   500
User 1  2   1000
User 1  3   1500
User 1  4   2000
User 1  5   2500
User 2  6   3000
User 2  7   3500
User 2  8   4000
User 2  9   4500
User 2  10  5000
User 2  11  5500
User 2  12  6000
User 3  13  6500
User 3  14  7000
User 3  15  7500
User 3  16  8000
User 3  17  8500
User 3  18  9000
User 3  19  9500
User 3  20  10000
User 3  21  10500
User 3  22  11000

我實際得到的是:

    User    Warranty.Claim  Claim.amt
    User 1  1   500
    User 1  1   500
    User 1  3   1500
    User 1  4   2000
    User 1  5   2500
    User 2  6   3000
    User 2  7   3500
    User 2  8   4000
    User 2  9   4500
    User 2  10  5000
    User 2  11  5500
    User 2  12  6000
    User 3  13  6500
    User 3  14  7000
    User 3  15  7500
    User 3  16  8000
    User 3  17  8500
    User 3  18  9000
    User 3  19  9500
    User 3  8   4000
    User 3  21  10500
    User 3  22  11000

嘗試這種方法:首先刪除重復的行,然后按用戶分組並采樣所需數量的案例。

# create toy data
df <- data.frame(user=sample(1:10,1000,T),
                 warranty=sample(1:10,1000,T),
                 claim=sample(1:10,1000,T))

# count number of duplicate user-warranty-claim trios
df %>% count(user,warranty,claim) %>% arrange(desc(n))

# remove duplicates, sample 2 cases per user
df %>% group_by(user,warranty,claim) %>% slice(1) %>% 
  ungroup() %>% group_by(user) %>% sample_n(2)

您可以檢查sample_n()函數中的replace選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM