2016-03-31 16 views
0

我正在用R分析在線社區數據集。我非常感謝你的幫助,因爲我陷入了一個問題。以下是大綱:如何刪除所有R中只有一個變量級別的參與者,而不是第二個參與者?

數據集:每個用戶的用戶名都可用。每行代表一個在線社區中的一個用戶的活動。示例a:第1行顯示用戶「藍色」是迄今爲止他貢獻了一篇文章的在線社區x的「成員」。示例b:第5行顯示,用戶'blue'也是迄今爲止他貢獻了2篇文章的在線社區y的'所有者'。見下文!

問題:我想從數據集中刪除只作爲成員或用戶活動的所有用戶 - 在任何在線社區中。如果他們作爲多個在線社區中的成員活躍,我也希望將其刪除。換句話說,我想刪除用戶的橙色,紫色,黑色和白色。重要提示:數據集包含> 1Mio。行。我正在尋找一種將此考慮在內的方法:)謝謝。

username role # of posts 

blue member 1 
blue member 0 
red  owner 6 
red  owner 1 
blue owner 2 
red  member 1 
blue owner 3 
blue member 2 
blue owner 1 
blue owner 0 
red  member 8 
green owner 1 
red  owner 2 
red  member 3 
green member 4 
yellow owner 5 
green member 3 
green owner 4 
yellow owner 5 
yellow member 6 
yellow owner 8 

*orange owner 1 
orange owner 2 
purple member 3 
purple member 4 
black owner 4 
white member 4* 
+0

我不知道如何'。換句話說,我想刪除用戶「橙色」,「紫色」,「黑'和'白'涉及你的問題的其他描述。另外,看起來應該爲在線社區增加一個專欄,因爲從您的示例中不太清楚。 –

+0

爲了澄清,您希望刪除用戶名,如果它們不顯示爲* both *'owner'和'member'? – Adam

+0

@Adam,在這種情況下,爲什麼'red'不會被刪除,例如? –

回答

0

我假設我評論中的斷言是正確的。

使用data.table程序包,因爲我處於變態的情緒。請注意,轉換爲數據表將破壞您之後的任何數據框架語法,因此如果您嘗試將其插入其他代碼中,則以後需要使用setDF(users2)將其轉換回來。

library('data.table') 
setDT(users) 
users_to_remove <- users[, .N, .(username, role)][, .N, username][N == 1, username] 
users2 <- users[!(username %in% users_to_remove)] 
print(setdiff(users$username, users2$username)) 

第三行可能有點難以遵循,因爲它是鏈接3操作。

  1. 統計每個用戶名/角色組合的觀察值數量。
  2. 放棄每個組合具有的觀察值的數量,並計算每個用戶具有的角色數量。
  3. 限制到只有1個角色的用戶名,並返回用戶名的矢量
相關問題