使用DataFramesMeta.jl
模块,可以使用以下方法在Julia中链接操作
using DataFrames, DataFramesMeta df = DataFrame(a = collect(1:5), b = ["a","b","c","d","e"]) @> begin df @where(:a .> 2) @select(:a, :b, c = :a*2) end # or: print( @linq df |> @where(:a .> 2) |> @select(:a,:b, c = :a*2) ) 3x3 DataFrames.DataFrame | Row | a | b | c | |-----|---|-----|----| | 1 | 3 | "c" | 6 | | 2 | 4 | "d" | 8 | | 3 | 5 | "e" | 10 |
这个想法是df
宏的第一个参数,@where
整个@where
语句作为@select
宏的第一个参数.
但是我们可能希望顶线成为第二个参数,或者我们可能想在几个地方使用它.对于R用户(在R操作中可以使用链接%>%
),dplyr
包使用点(.
)表示法启用它,因此以下方法可以工作:
library(dplyr) df = data.frame(a = 1:5, b = c("a","b","c","d","e")) df %>% filter(a > 2) %>% mutate(c = nrow(.):1) %>% select(b,c) b c 1 c 3 2 d 2 3 e 1
我正在寻找一种模仿R的点符号的方法,但不幸的是,点符号在Julia中不起作用,我在包文档中找不到任何相关内容.
如果有人知道如何实现这一目标,请告诉我们.
当using Lazy
,@as
macro允许你命名线程参数:
@as _ x f(_, y) g(z, _) == g(z, f(x, y))
使用@as
宏,提到的任务可以像这样完成:
julia> import Lazy.@as julia> using DataFrames, DataFramesMeta julia> df = DataFrame(a = collect(1:5), b = ["a","b","c","d","e"]) 5x2 DataFrames.DataFrame | Row | a | b | |-----|---|-----| | 1 | 1 | "a" | | 2 | 2 | "b" | | 3 | 3 | "c" | | 4 | 4 | "d" | | 5 | 5 | "e" | julia> @as _ df @where(_, :a .> 2) @select(_,:a, :b, c = :a*2) 3x3 DataFrames.DataFrame | Row | a | b | c | |-----|---|-----|----| | 1 | 3 | "c" | 6 | | 2 | 4 | "d" | 8 | | 3 | 5 | "e" | 10 |