我有两个向量:
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)
}
这只是添加每个向量的第一个值,并返回: 错误:“}”中的意外“}”
我在这里不知所措.. 非常感谢。谢谢!
答案 0 :(得分:5)
只需使用rbind
,cbind
和as.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