我在函数中有一个DataFrame:
using DataFrames
myservs = DataFrame(serverName = ["elmo", "bigBird", "Oscar", "gRover", "BERT"],
ipAddress = ["12.345.6.7", "12.345.6.8", "12.345.6.9", "12.345.6.10", "12.345.6.11"])
myservs
5x2 DataFrame
| Row | serverName | ipAddress |
|-----|------------|---------------|
| 1 | "elmo" | "12.345.6.7" |
| 2 | "bigBird" | "12.345.6.8" |
| 3 | "Oscar" | "12.345.6.9" |
| 4 | "gRover" | "12.345.6.10" |
| 5 | "BERT" | "12.345.6.11" |
如何编写函数以获取名为server
的单个参数,不区分大小写,匹配server
DataArray中的myservs[:serverName]
参数,并返回匹配的ipAddress
}?
在R中,可以使用
完成myservs$ipAddress[grep("server", myservs$serverName, ignore.case = T)]
如果有人使用ElMo
或Elmo
作为server
,或serverName
保存为elmo
或ELMO
。
答案 0 :(得分:3)
我引用了如何在R中完成任务并尝试使用DataFrames
pkg来完成任务,但我之所以这样做,是因为我来自R
并且刚刚学习{{1} }。我向同事提出了很多问题,以下是我们提出的问题:
如果我要停止思考,这项任务会更加清晰
Julia
中的vectors
。R
可以快速循环遍历循环。即使如此,循环也不是最好的解决方案。我被告知要调查 Dicts(查看here示例)。
Julia
,Dict()
,zip()
和haskey()
引起了我的注意。这些有很多应用。我的解决方案甚至不需要使用
get()
pkg,而是使用它 使用Julia的DataFrames
和Matrix
数据表示。使用Array
我们保持全球环境凌乱和服务器名称/ IP 列表保持隐藏,从视图到那些只运行的列表 功能在示例代码中,我每次都在重新创建服务器矩阵,但在实际/实践中,我将拥有一个权限限制分隔文件,每次都会被读取。现在这没关系,因为分隔文件很小,但这可能效率不高或者是最好的方法。
let
答案 1 :(得分:2)
以这种方式:
julia> using DataFrames
julia> myservs = DataFrame(serverName = ["elmo", "bigBird", "Oscar", "gRover", "BERT"],
ipAddress = ["12.345.6.7", "12.345.6.8", "12.345.6.9", "12.345.6.10", "12.345.6.11"])
5x2 DataFrames.DataFrame
| Row | serverName | ipAddress |
|-----|------------|---------------|
| 1 | "elmo" | "12.345.6.7" |
| 2 | "bigBird" | "12.345.6.8" |
| 3 | "Oscar" | "12.345.6.9" |
| 4 | "gRover" | "12.345.6.10" |
| 5 | "BERT" | "12.345.6.11" |
julia> grep{T <: String}(pat::String, dat::DataArray{T}, opts::String = "") = Bool[isna(d) ? false : ismatch(Regex(pat, opts), d) for d in dat]
grep (generic function with 2 methods)
julia> myservs[:ipAddress][grep("bigbird", myservs[:serverName], "i")]
1-element DataArrays.DataArray{ASCIIString,1}:
"12.345.6.8"
修改强>
这个grep
在我的平台上运行得更快。
julia> function grep{T <: String}(pat::String, dat::DataArray{T}, opts::String = "")
myreg = Regex(pat, opts)
return convert(Array{Bool}, map(d -> isna(d) ? false : ismatch(myreg, d), dat))
end