更好的方法来计算独特项目的出现次数?

时间:2015-04-02 00:20:10

标签: julia

我有一个非常长的字符串DataArray,我想生成一个DataFrame,其中一列是所有唯一字符串,第二列是出现次数。现在我正在做像

这样的事情
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

但似乎应该有一个更容易的方法来做到这一点,可能只有一行。 (我知道我也可以通过在每次迭代而不是源中搜索结果来使代码更快一些。)一个可能相关的问题是here但它看起来不像hist重载对于非数字箱。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

如果您想要一个完整的框架,您可以按B分组并在每个组上调用nrow

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

即使在DataFrame上下文之外,您也可以始终使用DataStructures.counter而不是自己重新实现它:

julia> using DataStructures

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