首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataFrames.jl -按类型或名称子字符串选择列

DataFrames.jl -按类型或名称子字符串选择列
EN

Stack Overflow用户
提问于 2020-08-07 05:53:34
回答 1查看 297关注 0票数 1

我是新来的朱莉娅。

在DataFrames.jl中,有没有一种方法可以选择给定类型的所有变量,或者名称中包含给定子字符串的所有变量?

例如,在R中,我们有:

代码语言:javascript
复制
df %>% select_if(is.numeric)

df %>% select(matches("_some_string_"))

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 06:07:48

要选择具有给定子字符串的变量,请使用:

代码语言:javascript
复制
select(df, r"_some_string_")

实际上,它比子字符串强大得多--它可以是任何Regex

对于给定元素类型的变量的选择,这更加棘手。问题是,在Julia中,你比这里的R有更多的灵活性。例如,你可以有一个Any类型,但向量仍然只包含数字。

因此,您可以这样写:

代码语言:javascript
复制
select(df, findall(col -> eltype(col) <: Float64, eachcol(df)))

当然,这在这里是有限制的,您可以将Float64更改为类似RealNumberUnion{Missing, Int}之类的内容,具体取决于您想要选择的内容。或者写下:

代码语言:javascript
复制
select(df, findall(col -> all(v -> v isa Float64, col), eachcol(df)))

这一次您检查的不是容器的元素类型,而是存储值的实际类型。

这里有一个简单的例子来说明其中的区别:

代码语言:javascript
复制
julia> df = DataFrame(a=[1.0], b=Any[1.0], c=[1])
1×3 DataFrame
│ Row │ a       │ b   │ c     │
│     │ Float64 │ Any │ Int64 │
├─────┼─────────┼─────┼───────┤
│ 1   │ 1.0     │ 1.0 │ 1     │

julia> select(df, findall(col -> eltype(col) <: Float64, eachcol(df)))
1×1 DataFrame
│ Row │ a       │
│     │ Float64 │
├─────┼─────────┤
│ 1   │ 1.0     │

julia> select(df, findall(col -> all(v -> v isa Float64, col), eachcol(df)))
1×2 DataFrame
│ Row │ a       │ b   │
│     │ Float64 │ Any │
├─────┼─────────┼─────┤
│ 1   │ 1.0     │ 1.0 │
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63292277

复制
相关文章

相似问题

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