将交替向量插入数据框

时间:2013-10-25 17:18:33

标签: r vector dataframe

我有两个向量:

a <- c(ceiling(seq(0, top, length.out = 20)))

b <- c(floor(seq(100, bottom, length.out = 20)))

a : 1  2  2  2  3  3  3  4  4  4  5  5  5 .....

b : 100  98  96  95  93  91  90  88  86  85  83  82 .....

我想通过交替矢量项并添加一个额外的变量来创建数据框。 1表示矢量a分量,-1表示矢量b分量。

number sign
1      1
100    -1
2      1
98    -1

等...

如果一个向量比另一个向量长(如果没有更多可能的交替),则在数据帧的末尾添加其剩余值。 我有这样的事情:

for (n in [1:length(a)]) {
dataframe[nrow(dataframe)+1,] <- c(a[n],1)
dataframe[nrow(dataframe)+1,] <- c(b[n],-1)
}

这只是添加每个向量的第一个值,并返回:     错误:“}”中的意外“}”

我在这里不知所措.. 非常感谢。谢谢!

2 个答案:

答案 0 :(得分:5)

只需使用rbindcbindas.vector

a <- c(ceiling(seq(0, 5, length.out = 10)))
b <- c(floor(seq(100, 5, length.out = 10)))
a
#  [1] 0 1 2 2 3 3 4 4 5 5
b
#  [1] 100  89  78  68  57  47  36  26  15   5
cbind(as.vector(rbind(a, b)), c(1, -1))
#       [,1] [,2]
#  [1,]    0    1
#  [2,]  100   -1
#  [3,]    1    1
#  [4,]   89   -1
#  [5,]    2    1
#  [6,]   78   -1
#  [7,]    2    1
#  [8,]   68   -1
#  [9,]    3    1
# [10,]   57   -1
# [11,]    3    1
# [12,]   47   -1
# [13,]    4    1
# [14,]   36   -1
# [15,]    4    1
# [16,]   26   -1
# [17,]    5    1
# [18,]   15   -1
# [19,]    5    1
# [20,]    5   -1

## Or, if you want a data.frame
## data.frame(A = as.vector(rbind(a, b)), B = c(1, -1))

答案 1 :(得分:0)

我认为d2[,v1]你想要创造什么 -

a <- sample(0:49, 10)
b <- sample(50:100, 20)

adf <- data.frame(
v1 = a,
v2 = 1:length(a),
v3 = 1
)
bdf <- data.frame(
v1 = b,
v2 = 1:length(b),
v3 = -1
)

d <- rbind(adf,bdf)
d2 <- d[with(d,order(v2,v3)),]

输出:

> d2
   v1 v2 v3
11 93  1 -1
1  31  1  1
12 70  2 -1
2  29  2  1
13 72  3 -1
3   1  3  1
14 77  4 -1
4  28  4  1
15 57  5 -1
5  16  5  1
16 66  6 -1
6   5  6  1
17 91  7 -1
7  11  7  1
18 73  8 -1
8   3  8  1
19 60  9 -1
9  23  9  1
20 67 10 -1
10 43 10  1
21 88 11 -1
22 97 12 -1
23 80 13 -1
24 52 14 -1
25 63 15 -1
26 86 16 -1
27 51 17 -1
28 89 18 -1
29 84 19 -1
30 55 20 -1