r - 如何根据另一列的数值序列动态添加列

时间:2018-03-05 13:40:21

标签: r dataframe

如何根据另一列的数值序列在数据框中动态添加列?我想根据另一列的值将n列添加到数据框中。我有什么,我想拥有什么:

我有这个:

head(df)
     x  y
[1]  1 ola
[2]  2 ola
[3]  3 ola
[4]  5 ola
[5]  4 ola
[6]  2 ola
[7]  3 ola
[8]  1 ola
[9]  5 ola
[10] 4 ola
[11] 2 ola
[12] 3 ola
[13] 5 ola
[14] 4 ola
[15] 1 ola
[16] 2 ola
[17] 3 ola
[18] 5 ola
[19] 4 ola
[20] 1 ola
[21] 3 ola
[22] 5 ola
[23] 2 ola
[24] 1 ola
[25] 4 ola
[26] 2 ola

在我的情况下,我有一个包含18列的数据框,每列有3305708行。那么,我想做什么?我想根据列值x动态添加列。也就是说,在这种情况下,请添加值50的更多1列。像这样:

head(df)
     x   y   x_1 x_2 x_3  ...
[1]  1  ola   1   0   0   ...
[2]  2  ola   0   1   0   ...
[3]  3  ola   0   0   1   ...
[4]  5  ola   0   0   0   ...
[5]  4  ola   0   0   0   ...
[6]  2  ola   0   1   0   ...
[7]  5  ola   0   0   0   ...
[8]  1  ola   1   0   0   ...
[9]  5  ola   0   0   0   ...
[10] 4  ola   0   0   0   ...
[11] 2  ola   0   1   0   ...
[12] 3  ola   0   0   1   ...
[13] 5  ola   0   0   0   ...
[14] 4  ola   0   0   0   ...
[15] 1  ola   1   0   0   ...
[16] 2  ola   0   1   0   ...
[17] 3  ola   0   0   1   ...
[18] 5  ola   0   0   0   ...
[19] 4  ola   0   0   0   ...
[20] 1  ola   1   0   0   ...
[21] 3  ola   0   0   1   ...
[22] 5  ola   0   0   0   ...
[23] 2  ola   0   1   0   ...
[24] 1  ola   1   0   0   ...
[25] 4  ola   0   0   0   ...
[26] 2  ola   0   1   0   ...

我该如何动态执行此操作?在这种情况下,我只有5个值,但在我的情况下,我的列有45个值,我必须像在此处一样添加列。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我们可以在'x'列上使用table,使用行序列,cbind使用原始数据集

res <- cbind(df, as.data.frame.matrix(table(seq_len(nrow(df)), df$x)))
names(res) <-  tolower(make.names(names(res)))
res
#   x   y x1 x2 x3 x4 x5
#1 1 ola  1  0  0  0  0
#2 2 ola  0  1  0  0  0
#3 3 ola  0  0  1  0  0
#4 5 ola  0  0  0  0  1
#5 4 ola  0  0  0  1  0
#6 2 ola  0  1  0  0  0