【问题标题】:How to create several variables in a for loop increasing each one by 3 months in R?如何在 for 循环中创建多个变量,在 R 中将每个变量增加 3 个月?
【发布时间】:2019-06-28 15:06:49
【问题描述】:

我需要从某个日期 t1 开始创建 12 个变量,每个变量增加 3 个月。

这是一个例子:

 t1           t2           t3     
01-01-2000  01-04-2000   01-07-2000

我尝试过这样的事情(包lubridate):

for (i in 1:12) {
     month(AAA$t(i+1)) <- month(AAA$t(i)) + 3 }

但我得到:

as.POSIXlt(x) 中的错误:尝试应用非函数

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。那个样本应该是AAA,那是一个data.frame吗?它只有三列,但您希望它有 12 列?
  • AAA 是一个数据框。有一列 t1(上课日期),我需要从 t1 到 t12 有 12 列。如果t1的第一条记录是01-01-2000,那么t2的第一条记录应该是01-04-2000,t3的第一条记录应该是01-07-2000等等
  • 试试month(AAA$t(i+1)),而不是month(AAA[paste("t",i+1,sep="")])

标签: r date lubridate


【解决方案1】:

如果您想创建一个包含日期范围的 t1 到 t12 的数据框:

t = seq(mdy("01/01/2000"), by = "3 months", length.out = 12) #this replaces the loop
names(t) <- paste0("t", c(1:12)) #this names your vector
data.frame(as.list(t)) #this creates the df

【讨论】:

  • @Sabrina,这是 R 中“如何思考”的一个很好的例子;它是一种矢量化语言,因此您在其他语言的 for 循环中所做的很多事情都只是在矢量上完成。很少(但有时)需要 for 循环。
  • 谢谢你。如果我需要使用某个变量而不是(例如)“01/01/2000”怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多