2013-05-17 151 views
1

我想两个数据帧中的R结合成两列:结合两个数据帧为两列中的R

这里是两个数据帧的一个示例:

数据帧XY:

X  Y 
x1 y1 
x2 y2 
x3 y3 
x4 y4 
x5 y5 

数据帧XZ:

X  Z 
x1 z1 
x2 z2 
x3 z3 
x4 z4 
x5 z5 

我想要的结果是一个数据帧,看起来像这样的:

X  YZ 
x1 y1 
x2 y2 
x3 y3 
x4 y4 
x5 y5 
x1 z1 
x2 z2 
x3 z3 
x4 z4 
x5 z5 

这里是R代表上述样本数据帧代码:)

x <- c("x1", "x2", "x3", "x4", "x5") 
y <- c("y1", "y2", "y3", "y4", "y5") 
z <- c("z1", "z2", "z3", "z4", "z5") 

XY <- data.frame(x,y) 
XZ <- data.frame(x,z) 

我试过rbind(但还没有多少运气。合并仅通过添加列来合并数据帧。我不太清楚如何去做这件事。

回答

4

可能是你可以尝试重新命名列名如下:

names(XY)<- c("x","yz") 
names(XZ)<- c("x","yz") 
new <- rbind(XY,XZ) 
> new 
    x yz 
1 x1 y1 
2 x2 y2 
3 x3 y3 
4 x4 y4 
5 x5 y5 
6 x1 z1 
7 x2 z2 
8 x3 z3 
9 x4 z4 
10 x5 z5 

我希望它能帮助。

我相信为了使用rbind你需要有相同的列名。

2

值得一提的是,在data.tablerbind函数的功能,你想:

library(data.table) 

xy = data.table(XY) 
xz = data.table(XZ) 
rbind(xy, xz, use.names = F) 

# or convert them to `data.table` on the fly 
.rbind.data.table(XY, XZ, use.names = F) 
#  x y 
# 1: x1 y1 
# 2: x2 y2 
# 3: x3 y3 
# 4: x4 y4 
# 5: x5 y5 
# 6: x1 z1 
# 7: x2 z2 
# 8: x3 z3 
# 9: x4 z4 
#10: x5 z5 
0

如果你想Y和Z值对每个x值,那么你可以使用全外合并这样的: XYZ < - 合并(X = XY,Y = YZ,通过= “X”,所有= TRUE)

否则你可以简单绑定通过行作为两个数据帧:

XYZ <- rbind(XY, YZ)