我有一个data.frame
,它具有a
,b
和c
的时间序列值。我想建立一个随机的时间序列,以随机选择每一行(即日期)的列值。
例如,如果我们有以下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
最重要的是,我有许多不同的列,因此希望此列可以与列索引一起使用,因此不需要指定每个列的名称。
答案 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)])