【发布时间】:2015-09-28 17:37:39
【问题描述】:
我很懒,厌倦了用这样的代码在数据帧中选择行(在 0.4 RC 上):
using DataFrames
data = DataFrame(num=[1,2,3,4], let=["A", "B", "A", "B"])
subset = data[(data[:num].>1)&(data[:let].=="B"),:]
所以我写了下面的宏
# Need to import SubstitutionString from Base
macro sel(dt, conditions)
dtstr=string(dt)
str = string(conditions)
out_str = replace(str, r":\w+",SubstitutionString(string(dtstr, "[", "\\g<0>", "]")))
out_str = string(dtstr, "[", out_str, ",:]")
eval(parse(out_str))
end
这样我就可以改写了
subset = @sel data (:num.>1)&(:let.=="B")
这很好用,除非我想将列与“Turtles::Leonardo”或“12:25:00”等字符串匹配。有什么方法可以避免在这里错误地将字符串的内容识别为列名,或者这是这种草率的转换为字符串并在元编程上工作的限制?
【问题讨论】:
-
import Base.SubstitutionString?请告诉我如何导入 SubstitutionString -
我应该提到 - 这仅适用于 0.4 - 看起来自 3.11 以来对替换进行了一些更改。
标签: macros dataframe metaprogramming julia