繁体   English   中英

在R中交织两个data.frames

[英]interweave two data.frames in R

我想在R中交织两个data.frame 。例如:

a = data.frame(x=1:5, y=5:1)
b = data.frame(x=2:6, y=4:0)

我希望结果看起来像:

> x y
  1 5
  2 4
  2 4
  3 3
  3 3
  ...  

通过获得cbind荷兰国际集团x[1]y[1] x[2]y[2]等等。

最干净的方法是什么? 现在我的解决方案涉及吐出到列表和合并。 这很难看:

lst = lapply(1:length(x), function(i) cbind(x[i,], y[i,]))
res = do.call(rbind, lst)

当然,“gdata”包中有interleave函数:

library(gdata)
interleave(a, b)
#    x y
# 1  1 5
# 6  2 4
# 2  2 4
# 7  3 3
# 3  3 3
# 8  4 2
# 4  4 2
# 9  5 1
# 5  5 1
# 10 6 0

你可以通过给xy一个索引, rbind它们并按索引排序来做到这一点。

a = data.frame(x=1:5, y=5:1)
b = data.frame(x=2:6, y=4:0)
df <- rbind(data.frame(a, index = 1:nrow(a)), data.frame(b, index = 1:nrow(b)))
df <- df[order(df$index), c("x", "y")]

这就是我的方法:

dat <- do.call(rbind.data.frame, list(a, b))
dat[order(dat$x), ]

do.call在第一步中是不必要的,但使解决方案更具可扩展性。

也许这是作弊,但ggplot2中的(非导出)函数interleave是我之前为自己使用而被盗的东西:

as.data.frame(mapply(FUN=ggplot2:::interleave,a,b))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM