首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia @Subset Dates

Julia @Subset Dates
EN

Stack Overflow用户
提问于 2021-09-07 06:47:08
回答 1查看 67关注 0票数 3

这应该是一个简单的问题,但我找不到任何关于这方面的文档或先前的问答。使用Julia to subset很容易,特别是在使用@Chain命令时。但我一直没有想出一种方法来对约会进行子集:

代码语言:javascript
复制
maindf = @chain rawdf begin
    @subset(Dates.year(:travel_date) .== 2019)
end

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

代码语言:javascript
复制
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中,这将是简单的:

代码语言:javascript
复制
maindf = rawdf %>% 
filter(., year(travel_date) == 2019)

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 07:27:46

使用:

代码语言:javascript
复制
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)。

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

代码语言:javascript
复制
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的情况也是如此

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69083523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档