首页 > 解决方案 > 重复多个列元素可变次数

问题描述

我有一个看起来像这样的数据框:

test <- data.frame(k = 0:5, A = sample(6), B = sample(6), C = sample(6))

k A B C
0 4 5 0
1 2 3 8
2 3 2 2
3 0 0 0
4 1 0 2

我正在尝试重复、 和指定的次数的每个元素A,然后将新向量存储在一个新的数据框中,如下所示:BCk

A B C
0 0 1
0 0 1
0 0 1
0 0 1
1 0 1
1 1 1
2 1 1

等等...

标签: r

解决方案


你可以很容易地用data.table包做到这一点。

test <- data.frame(k = 0:5, A = sample(6), B = sample(6), C = sample(6))
library(data.table)
setDT(test)
test[, sapply(.SD, function(x) rep(k, x)), .SDcols = colnames(test)[-1]]

在这里您执行函数function(x) rep(k, x),其中xA:C( .SDcols = colnames(test)[-1]) 列。

结果:

      A B C
 [1,] 0 0 0
 [2,] 0 0 0
 [3,] 0 1 1
 [4,] 0 1 1
 [5,] 0 1 1
 [6,] 0 1 1
 [7,] 1 1 1
 [8,] 1 2 1
 [9,] 2 3 2
[10,] 3 3 3
[11,] 3 3 3
[12,] 3 4 3
[13,] 4 4 4
[14,] 4 4 4
[15,] 4 4 4
[16,] 4 4 4
[17,] 5 4 5
[18,] 5 5 5
[19,] 5 5 5
[20,] 5 5 5
[21,] 5 5 5

推荐阅读