2016-07-13 11 views
1

Ich versuche cbind zwei unterschiedlich benannte Arrays in einen Datenrahmen.So verschmelzen zwei unterschiedlich geordnete Arrays nach Spalten

x = c("a" = 1, "z" = 10) 
y = c("z" = 10, "a" = 1) 

# Expected output: 
# x y 
# a 1 1 
# z 10 10 

Ich habe versucht, die folgenden und alle die Namen der Felder ignoriert:

# Unexpected outputs: 
cbind(x,y) 
merge(as.data.frame(x),as.data.frame(y)) 
library(dplyr); bind_cols(as.data.frame(x),as.data.frame(y)) 

Grundsätzlich weiß ich, dass ich die Arrays in dataframe verwandeln konnte und dann durch Zeilennamen binden, oder ich könnte die Namen zuordnen und die Arrays beim Binden indizieren.

Ich habe mich gefragt, ob es einen geradlinigeren Weg für solch eine einfache Aufgabe gibt.

+1

Sortieren nach den Namen 'cbind (x, y = y [Ordnung (Namen (y))]) '. Dies setzt natürlich voraus, dass "x" bereits geordnet ist, was wahr sein kann oder auch nicht. –

+0

@RichardScriven Zustimmen, aber das geht auch davon aus, dass alle Elemente in den beiden Arrays vorhanden und nur anders geordnet sind .. – Deena

Antwort

1

kam ich mit

bis
x <- c("a" = 1, "z" = 10) 
y <- c("z" = 10, "a" = 1) 

cbind(x, "y"=y[names(x)]) 

> x y 
>a 1 1 
>z 10 10 

nicht optimal sein, aber vielleicht ist es genug für Ihre Zwecke ...

+0

Viel besser als die 'as.data.frame' Ideen, die ich mir ausgedacht habe. Danke Martin! – Deena

Verwandte Themen