質問を明確にしたいと思いますが、ここで詳しく説明します。次のデータフレームがあります。
m = DataFrame(
x = [1,2,3],
y = [[1,2,3],[4,5,6],[7,8,9]])
私の目的は、各y配列の2乗に列内の位置に対応するx文字列を加えた列zを取得することです。多分あなたはそのようにそれを得ることができます:
m = DataFrame(
x = [1,2,3],
y = [[1,2,3],[4,5,6],[7,8,9]],
z = [[2,5,10],[18,27,38],[52,67,84]])
私はこのコードを使用してRでそれを行うことができます:
m <- m %>% mutate(z = map2(x,y, ~map2_dbl(.x,.y, ~ (.x + .y^2))))
ジュリアに似たようなものはありますか?よろしく
このようなものが機能するはずです:
julia> using DataFrames
julia> m = DataFrame(
x = [1,2,3],
y = [[1,2,3],[4,5,6],[7,8,9]])
3×2 DataFrame
│ Row │ x │ y │
│ │ Int64 │ Array… │
├─────┼───────┼───────────┤
│ 1 │ 1 │ [1, 2, 3] │
│ 2 │ 2 │ [4, 5, 6] │
│ 3 │ 3 │ [7, 8, 9] │
julia> m.z = map(eachrow(m)) do row
row.x .+ row.y .^ 2
end
3-element Array{Array{Int64,1},1}:
[2, 5, 10]
[18, 27, 38]
[52, 67, 84]
julia> m
3×3 DataFrame
│ Row │ x │ y │ z │
│ │ Int64 │ Array… │ Array… │
├─────┼───────┼───────────┼──────────────┤
│ 1 │ 1 │ [1, 2, 3] │ [2, 5, 10] │
│ 2 │ 2 │ [4, 5, 6] │ [18, 27, 38] │
│ 3 │ 3 │ [7, 8, 9] │ [52, 67, 84] │
ただし、ここで無名関数を使用せず、代わりに通常の関数を作成する方が明確(読みやすい)になると思います。
# Define the function that works on one dataframe row
julia> f(x, y) = y.^2 .+ x
f (generic function with 1 method)
julia> f(1, [1,2,3])
3-element Array{Int64,1}:
2
5
10
# And broadcast (map) it to all rows
julia> m.z = f.(m.x, m.y)
3-element Array{Array{Int64,1},1}:
[2, 5, 10]
[18, 27, 38]
[52, 67, 84]
julia> m
3×3 DataFrame
│ Row │ x │ y │ z │
│ │ Int64 │ Array… │ Array… │
├─────┼───────┼───────────┼──────────────┤
│ 1 │ 1 │ [1, 2, 3] │ [2, 5, 10] │
│ 2 │ 2 │ [4, 5, 6] │ [18, 27, 38] │
│ 3 │ 3 │ [7, 8, 9] │ [52, 67, 84] │
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加