gpt4 book ai didi

date - Julia @子集日期

转载 作者:行者123 更新时间:2023-12-05 01:57:36 24 4
gpt4 key购买 nike

这应该很简单,但我找不到任何文档或之前的问答。使用 Julia 进行子集化很容易,尤其是使用 @Chain 命令时。但是我这辈子都没有想出一种在日期上进行子集化的方法:

maindf = @chain rawdf begin
@subset(Dates.year(:travel_date) .== 2019)
end

在所有文档中 Dates.year(today()) 应该生成 (2021) 但这最终会给我一个错误:

ERROR: MethodError: no method matching +(::Vector{Date}, ::Int64)
Closest candidates are:
+(::Any, ::Any, ::Any, ::Any...) at operators.jl:560
+(::T, ::T) where T<:Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8} at int.jl:87
+(::T, ::Integer) where T<:AbstractChar at char.jl:223

不确定为什么会出现方法错误..

在使用 DPLYR 的 R 中,这将是:

maindf = rawdf %>% 
filter(., year(travel_date) == 2019)

有什么想法吗?

最佳答案

使用:

julia> using DataFramesMeta, Dates

julia> df = DataFrame(travel_date=repeat([Date(2019,1,1), Date(2020,1,1)],3), id=1:6)
6×2 DataFrame
Row │ travel_date id
│ Date Int64
─────┼────────────────────
1 │ 2019-01-01 1
2 │ 2020-01-01 2
3 │ 2019-01-01 3
4 │ 2020-01-01 4
5 │ 2019-01-01 5
6 │ 2020-01-01 6

julia> @rsubset(df, year(:travel_date) == 2019)
3×2 DataFrame
Row │ travel_date id
│ Date Int64
─────┼────────────────────
1 │ 2019-01-01 1
2 │ 2019-01-01 3
3 │ 2019-01-01 5

julia> @subset(df, year.(:travel_date) .== 2019)
3×2 DataFrame
Row │ travel_date id
│ Date Int64
─────┼────────────────────
1 │ 2019-01-01 1
2 │ 2019-01-01 3
3 │ 2019-01-01 5

区别在于 @rsubset 按行工作,而 @subset 按整列工作。

您的问题是,在 Dates.year(:travel_date) .== 2019) 中,您混合了 year 函数的非广播调用和广播比较 .== 2019.您始终需要确保您是按行工作(在这种情况下使用 @rsubset)还是在整列上工作(使用 @subset)。

不同的场景可能需要不同的方法。以下是整列方法有用的示例:

julia> using Statistics

julia> @subset(df, :id .> mean(:id))
3×2 DataFrame
Row │ travel_date id
│ Date Int64
─────┼────────────────────
1 │ 2020-01-01 4
2 │ 2019-01-01 5
3 │ 2020-01-01 6

您希望 mean 对整列进行运算的位置。

编辑

这里与 @chain 相同:

julia> @chain df begin
@subset year.(:travel_date) .== 2019
end
3×2 DataFrame
Row │ travel_date id
│ Date Int64
─────┼────────────────────
1 │ 2019-01-01 1
2 │ 2019-01-01 3
3 │ 2019-01-01 5

关于date - Julia @子集日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69083523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com