2015-04-02 15 views
7

Çok uzun bir DataArray dizgisi var ve bir sütunun tüm benzersiz dizeleri ve ikincisinin olay sayısı olduğu bir DataFrame oluşturmak istiyorum. Şu andaBenzersiz öğelerin oluşum sayısını saymanın daha iyi bir yolu?

using DataFrames 
df = DataFrame() 
df[:B]=[ "a", "c", "c", "D", "E"] 
uniqueB = unique(df[:B]) 
println(uniqueB) 
howMany=zeros(size(uniqueB)) 
for i=1:size(uniqueB,1) 
    howMany[i] = count(j->(j==uniqueB[i]), df[:B]) 
end 
answer = DataFrame() 
answer[:Letters] = uniqueB 
answer[:howMany] = howMany 
answer 

gibi bir şey yapıyorum ama muhtemelen tek bir satır ile, bunu yapmak için çok daha kolay bir yolu var olması gerektiği gibi görünüyor. (Ayrıca, kaynaktan ziyade her iterasyonda sonucu arayarak, biraz daha fazla kodla bunu daha hızlı yapabilirim.) Muhtemelen ilgili bir soru here'dur, fakat rakam, sayısal olmayan kutular için aşırı yüklenmiştir. Düşüncesi olan var mı?

cevap

7

tam bir çerçeve, sen B tarafından grup can ve her grup nrow arayın isterseniz:

julia> by(df, :B, nrow) 
4x2 DataFrames.DataFrame 
| Row | B | x1 | 
|-----|-----|----| 
| 1 | "D" | 1 | 
| 2 | "E" | 1 | 
| 3 | "a" | 1 | 
| 4 | "c" | 2 | 

bile DataFrame bağlamı dışında olsa da, her zaman yerine kendiniz reimplementing daha DataStructures.counter kullanabilirsiniz:

julia> using DataStructures 

julia> counter(df[:B]) 
DataStructures.Accumulator{ASCIIString,Int32}(Dict("D"=>1,"a"=>1,"c"=>2,"E"=>1))