2016-03-31 15 views
0

Bir çevrimiçi topluluk veri kümesini R ile analiz ediyorum. Tek sorunla uğraştığım için yardımın için gerçekten minnettarım. İşte bir özet:Yalnızca R’deki tüm katılımcıları, yalnızca tek bir değişken seviyesinde ve ikincisinde hiç olmadığı zaman nasıl kaldırabilirim?

Veri seti: Her kullanıcının kullanıcı adı kullanılabilir. Her satır, tek bir çevrimiçi toplulukta bir kullanıcının aktivitesini temsil eder. Örnek a: 1. satır, 'mavi' kullanıcısının, o ana kadar bir gönderiye katkıda bulunduğu çevrimiçi topluluk x'in bir üyesi olduğunu gösterir. Örnek b: 5. satırda, 'mavi' kullanıcısının, şu ana kadar 2 gönderiye katkıda bulunduğu çevrimiçi toplulukların y sahibi olduğu gösterilir. Aşağıya bakınız!

Soru: Herhangi bir çevrimiçi toplulukta yalnızca kullanıcı veya kullanıcı olarak etkin olan veri kümesindeki tüm kullanıcıları kaldırmak istiyorum. Ayrıca, birkaç çevrimiçi toplulukta üye olarak aktif olmaları durumunda bunları kaldırmak istiyorum. Diğer bir deyişle, kullanıcıların 'turuncu', 'mor', 'siyah' ve 'beyaz' kaldırmak istiyorum. Önemli: Veri kümesi> 1Mio içerir. satırlar. Bunu dikkate alan bir yaklaşım arıyorum :) Teşekkür ederim.

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

adlarının bir vektör dönmek black'and 'white'', sorununuzun diğer açıklamasına ilişkindir. Ayrıca, çevrimiçi topluluk için ek bir sütun olması gerektiği anlaşılıyor, çünkü bu örnekte açık değil. –

+0

Açıklığa kavuşturmak için, kullanıcı adı '* sahibi' ve 'üye' olarak gösterilmiyorsa kullanıcı adlarını kaldırmak istiyorsunuz? – Adam

+0

@Adam, bu durumda, örneğin neden "kırmızı" kaldırılmaz? –

cevap

0

Yorumdaki ifadenin doğru olduğunu varsayardım.

data.table paketini kullanıyorum çünkü fanboy havamdayım. Bir veri tablosuna dönüştürmenin, daha sonra sahip olduğunuz herhangi bir veri çerçeve sözdizimini keseceğine dikkat edin. Bu nedenle, bunu başka bir koda takmaya çalışıyorsanız, daha sonra geri yüklemek için setDF(users2)'u kullanmak isteyeceksiniz.

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 satırı takip etmek biraz zor olabilir, çünkü 3 işlemi zincirliyor.

  1. Her kullanıcı adı/rolü birleşimi için gözlem sayısını hesaplayın.
  2. Her birleşimin sahip olduğu gözlem sayısını göz ardı edin ve her kullanıcı adının sahip olduğu rol sayısını da hesaba katın.
  3. ', sadece 1 role sahip kullanıcı adlarının sınırla ve ben, başka bir deyişle, kullanıcıların turuncu' kaldırmak istediğiniz nasıl ` 'mor' anlamıyorum
İlgili konular