首页 > 解决方案 > 用随机值序列替换列中的值

问题描述

我有一个像下面这样的数据集,但有更多的行和列。

df <- data.frame(lat = c(19.3606, 19.2462, 19.3587),
                 long = c(-155.0684, -155.2582, -155.0274),
                 acq_date = c('2020-12-11','2020-12-11','2020-12-13')
)

我想用定义的时间范围内的随机日期替换 acq_date 列值。我找到了一些代码来创建随机日期(生成随机日期)并遍历行(对于 R 数据框中的每一行),但我没有看到数据框中填充了新日期。我在这里想念什么?

for(i in 1:nrow(df)) {
  row <- df[i,]
  row$acq_date <- sample(seq(as.Date('2020/12/15'), as.Date('2021/01/30'), by="day"), 1)
}

标签: rfor-looprandomindexing

解决方案


问题是您将行从数据框中取出,对其进行编辑,但不要将其放回原处。

为了让你的代码工作,你可以做

for(i in 1:nrow(df)) {
  df$acq_date[i] <- sample(seq(as.Date('2020/12/15'), as.Date('2021/01/30'), by="day"), 1)
}

但我建议通过以下方式一次性创建随机日期

randomDates <- sample(seq(as.Date('2020/12/15'), as.Date('2021/01/30'), by="day"), nrow(df))

然后通过将它们插入df

df$acq_date <- randomDates 

推荐阅读