具有范围条件的数据框列值

时间:2014-01-20 15:29:40

标签: arrays r matrix dataframe

我想创建下面的列,其中我可以指定将值1应用于一列的范围,其余为0。我知道之前已经有人问过这个问题,但我现在找不到那个特别的。

    time1   time2   time3   time4   time5
1       1       0       0       0       0
2       1       0       0       0       0
3       1       0       0       0       0
4       1       0       0       0       0
5       1       0       0       0       0
6       0       1       0       0       0
7       0       1       0       0       0
8       0       1       0       0       0
9       0       1       0       0       0
10      0       1       0       0       0
11      0       0       1       0       0
12      0       0       1       0       0
13      0       0       1       0       0
14      0       0       1       0       0
15      0       0       1       0       0
16      0       0       0       1       0
17      0       0       0       1       0
18      0       0       0       1       0
19      0       0       0       1       0
20      0       0       0       1       0
21      0       0       0       0       1
22      0       0       0       0       1
23      0       0       0       0       1
24      0       0       0       0       1
25      0       0       0       0       1

我不记得是如何生成的,但答案包括 n 选项来指定每列的间隔。

2 个答案:

答案 0 :(得分:3)

你可以做到

cols <- 4
diag(cols)[rep(1:cols, each=cols), ]

      [,1] [,2] [,3] [,4]
 [1,]    1    0    0    0
 [2,]    1    0    0    0
 [3,]    1    0    0    0
 [4,]    1    0    0    0
 [5,]    0    1    0    0
 [6,]    0    1    0    0
 [7,]    0    1    0    0
 [8,]    0    1    0    0
 [9,]    0    0    1    0
[10,]    0    0    1    0
[11,]    0    0    1    0
[12,]    0    0    1    0
[13,]    0    0    0    1
[14,]    0    0    0    1
[15,]    0    0    0    1
[16,]    0    0    0    1

答案 1 :(得分:0)

我终于找到了确切的问题:“R add new column with predefined pattern”我正在寻找的解决方案是:

range <- 5
cols <- 5
y <- gl(cols, range)
mat <- model.matrix(~y-1) # -1 is for remove the intercept
colnames(mat) <- paste0('var', 1:cols)
mat

它提供了一个数据框,可以包含在其他数据框中(通过merge(old, new))并指定列的名称。

输出结果为:

   var1 var2 var3 var4 var5
1     1    0    0    0    0
2     1    0    0    0    0
3     1    0    0    0    0
4     1    0    0    0    0
5     1    0    0    0    0
6     0    1    0    0    0
7     0    1    0    0    0
8     0    1    0    0    0
9     0    1    0    0    0
10    0    1    0    0    0
11    0    0    1    0    0
12    0    0    1    0    0
13    0    0    1    0    0
14    0    0    1    0    0
15    0    0    1    0    0
16    0    0    0    1    0
17    0    0    0    1    0
18    0    0    0    1    0
19    0    0    0    1    0
20    0    0    0    1    0
21    0    0    0    0    1
22    0    0    0    0    1
23    0    0    0    0    1
24    0    0    0    0    1
25    0    0    0    0    1