[英]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.