0

对于这个简单的问题,我深表歉意。基本上,我想制作三个单独的 cumsum() 表,并通过第一个表将它们合并在一起。例如:

a <- cumsum(table(df$variable))
b <- cumsum(table(df$variable[c(TRUE, FALSE)]))
c <- cumsum(table(df$variable[c(FALSE, TRUE)]))

其中a是df$variable的整个向量的cumsum,b是df$variable的奇数值的cumsum,c是df$variable的偶数值的cumsum。另一种解释方式是结合bc产生a

这是整个数字向量。

  [1] 18 17 15 10  5  0 10 10  0 10 15  5  5  5 25 15 13  0  0  0 25 18 15 15  1  4  5
 [28]  5  5 15  5 12 15  0  3 12 20  0  5  5 13 10 10 10  3 15 13 20 12 60 10 10  2  0
 [55]  5 10  8  4  0 15  5  5 15  5  0  5  2  8  5  5  5  5  9  9  3  7 20 25  5  4 10
 [82] 10  2  4  5  5 18  8  0 10  5  5  7 12  5 13 26 20 13 21  5 15 10 10  5 15  5 15
[109]  0  1 13 21 25 25  5 14  5 15 10  0  5 15  3  4  5 15 15  5 25 25  5 15  0  2 13
[136] 22  2 10  3  3 15 11  0  2 40 35 24 24  5  5 10  5 16  0 17 19 20  5  5  5  0 15
[163]  3 13 20  4  5  5  3 19 25 25  0 15  5  3 22 22 25  5 15 15  5 15 17  9  5  5 15
[190] 10

对于一个,我使用 cbind(cumsum(table(df$variable)))

0     18
1     20
2     26
3     35
4     41
5     88
7     90
8     93
9     96
10   115
11   116
12   120
13   128
14   129
15   154
16   155
17   158
18   161
19   163
20   169
21   171
22   174
24   176
25   186
26   187
35   188
40   189
60   190

对于 b,我使用 cbind(cumsum(table(df$variable[c(TRUE, FALSE)])))

0    10
1    11
2    15
3    22
5    50
7    51
8    52
9    53
10   60
12   61
13   67
15   76
16   77
17   79
18   81
20   85
22   86
24   87
25   93
26   94
40   95

对于 c,我使用 cbind(cumsum(table(df$variable[c(FALSE, TRUE)])))

0     8
1     9
2    11
3    13
4    19
5    38
7    39
8    41
9    43
10   55
11   56
12   59
13   61
14   62
15   78
17   79
18   80
19   82
20   84
21   86
22   88
24   89
25   93
35   94
60   95

在频率形式中,分布应该是这样的。

    a   b   c
0   18  10  8
1   2   1   1
2   6   4   2
3   9   7   2
4   6   0   6
5   47  28  19
7   2   1   1
8   3   1   2
9   3   1   2
10  19  7   12
11  1   0   1
12  4   1   3
13  8   6   2
14  1   0   1
15  25  9   16
16  1   1   0
17  3   2   1
18  3   2   1
19  2   0   2
20  6   4   2
21  2   0   2
22  3   1   2
24  2   1   1
25  10  6   4
26  1   1   0
35  1   0   1
40  1   1   0
60  1   0   1
    190 95  95

但我希望它采用 cumsum() 形式,这样它应该看起来像这样。我写了前 6 行作为说明。

    a   b   c
0   18  10  8
1   20  11  9
2   26  15  11
3   35  22  13
4   41  22  19
5   88  50  38
7   90  51  39

我遇到的问题是子集ab没有所有值(即某些值的频率为 0),因此它缩短了向量的长度;结果,我无法正确合并或 cbind() 这些值。

非常感谢任何建议。

4

1 回答 1

1

你可以match很容易地到达那里。假设您的数据是:

set.seed(1)
df <- data.frame(variable=rbinom(10,prob=0.5,size=3))

像这样的东西似乎有效

out <- data.frame(a,b=b[match(names(a),names(b))],c=c[match(names(a),names(c))])
replace(out,is.na(out),0)

#   a b c
#0  1 0 1
#1  4 2 2
#2  7 4 3
#3 10 5 5
于 2015-01-13T05:02:10.490 回答