Data.Frame中每一行的样本随机列

时间:2018-11-01 04:01:57

标签: r dataframe

我有一个data.frame,它具有abc的时间序列值。我想建立一个随机的时间序列,以随机选择每一行(即日期)的列值。

例如,如果我们有以下df

df <- data.frame(date = c(as.Date("2018-08-01"),as.Date("2018-09-01"), as.Date("2018-10-01")), a = c(1.0, 1.5, 1.8), b=c(-1.0, -2.0, 3.0), c=c(-2.0, -15.0, 1.7))

 #> df
 #           date   a  b     c
 #   1 2018-08-01 1.0 -1  -2.0
 #   2 2018-09-01 1.5 -2 -15.0
 #   3 2018-10-01 1.8  3   1.7

看起来可能是随机样本(在这种情况下,第一个月选择a,第二个月选择b,第三个月选择c)。

df.random.sample <- data.frame(date = c(as.Date("2018-08-01"),as.Date("2018-09-01"), as.Date("2018-10-01")), random = c(1.0, -2.0, 1.7))

#> df.random.sample
#        date random
#1 2018-08-01    1.0
#2 2018-09-01   -2.0
#3 2018-10-01    1.7

最重要的是,我有许多不同的列,因此希望此列可以与列索引一起使用,因此不需要指定每个列的名称。

1 个答案:

答案 0 :(得分:1)

如果我们要逐行采样,请使用apply

cbind(df[1], random = apply(df[-1], 1, sample, size = 1))

或者使用带有row/column索引的矢量化方法

cbind(df[1], random = df[-1][cbind(seq_len(nrow(df)), sample(2:ncol(df))-1)])