朱莉娅有没有类似R桌子的功能?我已经阅读了xtab
,但不知道如何使用它。
假设我们有data.frame
rdata
col6
属于Factor
类型。
R示例代码:
rdata <- read.csv("mycsv.csv") #1
table(rdata$col6) #2
为了在Julia中读取数据和制作因子,我这样做:
using DataFrames
jldata = readtable("mycsv.csv", makefactors=true) #1 :col6 will be now pooled.
...,但是如何在julia中构建R表(如何实现#2)?
答案 0 :(得分:5)
您可以使用countmap
中的StatsBase.jl
函数来计算单个变量的条目。此时缺乏列联表的一般交叉列表和统计检验。正如Ismael所指出的,StatsBase.jl
的问题跟踪器已经讨论过这个问题。
答案 1 :(得分:4)
我得出结论,使用by
可以实现类似的效果:
让jldata
由:gender
列组成。
julia> by(jldata, :gender, nrow)
3x2 DataFrames.DataFrame
| Row | gender | x1 |
|-----|----------|-------|
| 1 | NA | 175 |
| 2 | "female" | 40254 |
| 3 | "male" | 58574 |
当然它不是table
,但至少我获得的数据类型与数据源相同。令人惊讶的是by
似乎比countmap
更快。
答案 2 :(得分:0)
我相信,从 1.5.3 开始,“by”在 Julia 中已贬值(它说:ERROR: ArgumentError: by function was removed from DataFrames.jl)。
所以这里有一些替代方案,我们可以使用 split apply combine 来做交叉表或使用 FreqTables。
使用拆分组合:
示例 1 - 单列:
using RDatasets
using DataFrames
mtcars = dataset("datasets", "mtcars")
## To do a table on cyl column
gdf = groupby(mtcars, :Cyl)
combine(gdf, nrow)
输出:
# 3×2 DataFrame
# Row │ Cyl nrow
# │ Int64 Int64
# ─────┼──────────────
# 1 │ 6 7
# 2 │ 4 11
# 3 │ 8 14
示例 2 - 2 列之间的交叉表:
## we have to just change the groupby code a little bit and rest is same
gdf = groupby(mtcars, [:Cyl, :AM])
combine(gdf, nrow)
输出:
#6×3 DataFrame
# Row │ Cyl AM nrow
# │ Int64 Int64 Int64
#─────┼─────────────────────
# 1 │ 6 1 3
# 2 │ 4 1 8
# 3 │ 6 0 4
# 4 │ 8 0 12
# 5 │ 4 0 3
# 6 │ 8 1 2
另外,如果您不喜欢顶部的 nrow 名称,您可以使用:
combine(gdf, nrow => :Count)
将名称更改为 Count
替代方法:使用 FreqTables
您可以使用包,FreqTables
如下所示很容易地进行计数和比例,添加它您可以使用 Pkg.add("FreqTables")
:
## Cross tab between cyl and am
freqtable(mtcars.Cyl, mtcars.AM)
## Proportion between cyl and am
prop(freqtable(mtcars.Cyl, mtcars.AM))
## with margin like R you can use it too in this (columnwise proportion: margin=2)
prop(freqtable(mtcars.Cyl, mtcars.AM), margins=2)
## with margin for rowwise proportion: margin = 1
prop(freqtable(mtcars.Cyl, mtcars.AM), margins=1)
输出:
## count cross tabs
#3×2 Named Array{Int64,2}
#Dim1 ╲ Dim2 │ 0 1
#────────────┼───────
#4 │ 3 8
#6 │ 4 3
#8 │ 12 2
## proportion wise (overall)
#3×2 Named Array{Float64,2}
#Dim1 ╲ Dim2 │ 0 1
#────────────┼─────────────────
#4 │ 0.09375 0.25
#6 │ 0.125 0.09375
#8 │ 0.375 0.0625
## Column wise proportion
#3×2 Named Array{Float64,2}
#Dim1 ╲ Dim2 │ 0 1
#────────────┼───────────────────
#4 │ 0.157895 0.615385
#6 │ 0.210526 0.230769
#8 │ 0.631579 0.153846
## Row wise proportion
#3×2 Named Array{Float64,2}
#Dim1 ╲ Dim2 │ 0 1
#────────────┼───────────────────
#4 │ 0.272727 0.727273
#6 │ 0.571429 0.428571
#8 │ 0.857143 0.142857