【问题标题】:How to save Julia for loop returns in an array or dataframe?如何将 Julia for 循环返回保存在数组或数据框中?
【发布时间】:2018-06-10 18:54:01
【问题描述】:

如代码所示,我正在尝试对 DataFrame 的每一行应用一个函数。

using RDatasets
iris = dataset("datasets", "iris")

function mean_n_var(x)
    mean1=mean([x[1], x[2], x[3], x[4]])
    var1=var([x[1], x[2], x[3], x[4]])
    rst=[mean1, var1]
    return rst
end

mean_n_var([2,4,5,6])

for row in eachrow(iris[1:4])
    println(mean_n_var(convert(Array, row)))
end

但是,我不想打印结果,而是将它们保存在数组或另一个 DataFrame 中。

提前致谢。

【问题讨论】:

  • 你能试试comprehension:[mean_n_var(convert(Array, row)) for row in eachrow(iris[1:4])]吗?
  • 另一种选择是mapmap(row->mean_n_var(convert(Array, row)), eachrow(iris[1:4]))
  • 要得到一个矩阵作为输出,reshape 和一个理解的组合:reshape([v for row in eachrow(iris[1:4]) for v in mean_n_var(convert(Array, row))],2,:)

标签: for-loop dataframe julia


【解决方案1】:

我认为值得一提的是比已经提到的更多可用选项。

我假设您想要 MatrixDataFrame。有几种可能的方法。

首先是最直接的得到一个Matrix

mean_n_var(a) = [mean(a), var(a)]
hcat((mean_n_var(Array(x)) for x in eachrow(iris[1:4]))...) # rows
vcat((mean_n_var(Array(x)).' for x in eachrow(iris[1:4]))...) # cols

另一种可能的方法是矢量化,例如:

mat_iris = Matrix(iris[1:4])
mat = hcat(mean(mat_iris, 2), var(mat_iris, 2))
df = DataFrame([vec(f(mat_iris, 2)) for f in [mean,var]], [:mean, :var])
DataFrame(mat) # this constructor also accepts variable names on master but is not released yet

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多