更好的方法来计算独特项目的出现次数?
Better way to count number of occurrences of unique items?
我有一个很长的字符串 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 为非超载- 数字箱。有什么想法吗?
如果想要全帧,可以按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))
我有一个很长的字符串 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 为非超载- 数字箱。有什么想法吗?
如果想要全帧,可以按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))