Dataframe 数据帧中两列或多列的矢量化联接

Dataframe 数据帧中两列或多列的矢量化联接,dataframe,julia,Dataframe,Julia,我有一个JuliaDataFrame,有几个String和Int列。我想以矢量化的方式将它们水平粘合在一起,以生成一个列。在R中,我将使用粘贴。这在朱莉娅身上可能吗 所需的输出不是hcat或vcat等操作的输出。我们的目标是创建一个新的字符串列,其中包含行“x1[i]:x2[i]”,其中x1[i]和x2[i]是DataFrame对象的列x1和x2中对应的行元素 朱莉娅示例: # tested in Julia v0.5.0 and v0.6.2 # example data frame y =

我有一个Julia
DataFrame
,有几个
String
Int
列。我想以矢量化的方式将它们水平粘合在一起,以生成一个列。在R中,我将使用
粘贴
。这在朱莉娅身上可能吗

所需的输出不是
hcat
vcat
等操作的输出。我们的目标是创建一个新的字符串列,其中包含行
“x1[i]:x2[i]”
,其中
x1[i]
x2[i]
DataFrame
对象的列
x1
x2
中对应的行元素

朱莉娅示例

# tested in Julia v0.5.0 and v0.6.2
# example data frame
y = DataFrame(x1 = [1,2,3], x2 = ["A","B","C"])

# goal: make column ["1:A"; "2:B", "3:C"]
# desired output format for one row
join( [ y[1,:x1], y[1,:x2] ], ":" ) # > "1:A"

# doesn't work with vectors, makes one long string
# (0.5) > "[1,2,3]:String[\"A\",\"B\",\"C\"]"
# (0.6) > "Any[1, 2, 3]:Any[\"A\", \"B\", \"C\"]"
join([y[:,:x1], y[:,:x2]], ":")

# default broadcast operation doesn't work either
# (0.5) > ERROR: MethodError: no method matching size(::String)
# (0.6) > 2-element Array{String,1}:
#           "1:2:3"
#           "A:B:C"
join.([y[:,:x1], y[:,:x2]], ":")
R示例

# same data structure as before
y = data.frame(x1 = c(1:3), x2 = c("A", "B", "C"))

# desired output format with 'paste'
paste(y$x1, y$x2, sep = ":") # > "1:A" "2:B" "3:C"

可能的替代方案有:

  • [“$(r[:x1]):$(r[:x2])”表示每个箭头中的r(y)]

  • [在每个箭头(y)中为r加入(数组(r),“:”)

  • mapsicles(x->join(x,“:”)(数组(y)),2)

  • map(x->join(x,“:”),zip(y[:x1],string.(y[:x2]))

  • [string(y[:x1][i])*”:“*string(y[:x2][i])表示i=1:nrow(y)]


  • 就性能而言,它们并不都相同(选项5最快,但更具体)。

    我没想到会得到三个有效答案;-)如果你把这些作为答复转寄,那么我可以接受。谢谢。为了清晰起见,删除了注释