我想通过使用两个值向量在R中构建3x3 data.frame:x值(xr)的向量和y值(yr)的向量。 xr有3个值,yr有9个值。
这是我的例子:
xr<-c(1,2,3)
yr<-c(4,4,4,5,5,5,6,6,6)
db<-data.frame(x=xr,y=yr)
生成的data.frame如下:
> db
x y
1 4
2 4
3 4
1 5
2 5
3 5
1 6
2 6
3 6
但是,我希望data.frame是这样的:
> db
x y
1 4
1 4
1 4
2 5
2 5
2 5
3 6
3 6
3 6
这样做的简单方法是使用另一个xr,使用x的显式序列值,如下所示:
xr<-c(1,2,3,1,2,3,1,2,3)
但是,我正在寻找一种通过使用与我的第一个示例中相同的xr来创建此类data.frame的方法。
非常感谢任何帮助!
答案 0 :(得分:4)
这只是each
函数的rep
参数的问题。它完全符合其名称所暗示的内容。
db<-data.frame(x= rep(xr, each = 3) ,y=yr)
db
x y
1 1 4
2 1 4
3 1 4
4 2 5
5 2 5
6 2 5
7 3 6
8 3 6
9 3 6
答案 1 :(得分:4)
要捕捉游程长度的任何可能差异,以及rep()
,您可能需要rle()
data.frame(x = rep(xr, rle(yr)$lengths), y = yr)
要显示我的意思,请按以下方式zr
。它具有不同的运行长度(即它们不是全部3)。
zr <- c(4, 4, 4, 5, 5, 6)
data.frame(x = rep(xr, rle(zr)$lengths), z = zr)
# x z
# 1 1 4
# 2 1 4
# 3 1 4
# 4 2 5
# 5 2 5
# 6 3 6