replace - 如何用 Julia 中的变量模式替换 DataFrame 列中的子字符串?
问题描述
假设我有一个包含两列的 DataFrame -gibberish
和letter
. 我想替换子字符串,gibberish
以便只letter
保留匹配的子字符串,例如 If gibberish
is"kjkkj"
和letter
is "j"
I want gibberish
to equal "jj"
。
DataFrame 定义为:
df = DataFrame(gibberish = ["dqzzzjbzz", "jjjvjmjjkjjjjjjj", "mmbmmlvmbmmgmmf"], letter = ["z", "j", "m"])
如果我没有letter
变量并且只想要,假设“x”保持不变,我会这样做:
df.gibberish.= replace.(gibberish, r"[^x;]" => "")
这很好用,但是当我尝试做同样的事情,但将letter
列作为正则表达式中的变量放入时,它就会中断。我尝试使用“正常” DataFrames.jl 方式和 DataFramesMeta.jl 快捷方式@transform
:
df.gibberish.= replace.(gibberish, Regex(join(["[^", letter, ";]"])) => "")
这导致错误
ERROR: UndefVarError: letter not defined
而@transform
方式只是没有做任何事情:
julia> @transform(df, filtered = replace(:gibberish, Regex.(join(["[^", :letter, ";]"])) => ""))
3×3 DataFrame
│ Row │ letter │ gibberish │ filtered │
│ │ String │ String │ String │
├──────┼────────┼───────────────────┼───────────────────┤
│ 1 │ z │ dqzzzjbzz │ dqzzzjbzz │
│ 2 │ j │ jjjvjmjjkjjjjjjj │ jjjvjmjjkjjjjjjj │
│ 3 │ m │ mmbmmlvmbmmgmmf │ mmbmmlvmbmmgmmf │
我是 Julia 的新手,我可能遗漏了一些非常基本的东西,但正确的解决方案让我无法理解。除了编写效率极低的逐行循环之外,我该如何解决这个问题?
解决方案
replace.(gibberish, Regex(join(["[^", letter, ";]"]))
letter 在这里指的是 Julia 变量(未定义),而不是 DataFrame 的列。
你可以尝试类似的东西
Regex.(string.("[^" .* df.letter .* ";]"))
使用 DataFrame 行作为输入构造正则表达式数组。
推荐阅读
- c# - 没有异常对象时的 Application Insights TrackException ExceptionTelemetry
- azure-active-directory - 如何验证用户是否属于 Azure AD 中的组?
- ios - 如何通过 UIkit 将组件嵌套到组件?
- google-cloud-platform - Google Stackdriver 默认端口被防火墙规则阻止
- abap - 如何将函数的结果写到屏幕上?
- keras - 使用 Keras 使用泊松采样标签提高 MLP 性能(用于多类分类)
- google-analytics - 命令验证后跟踪 Adwords 客户端
- c# - 实体框架中的导航属性为空
- r - 子集 data.table 基于在一列中发生 x 次的观察
- mysql - Return count for last 7 days with missing days filled in