【问题标题】:create a sequence variable in R in a loop and if statement在循环和 if 语句中在 R 中创建一个序列变量
【发布时间】:2020-06-22 20:00:10
【问题描述】:

我有一个以“week_number”和“year”为列的数据集。对于每一年,我的 week_number 从 1 到 52 并且我想创建一个序列变量,以便在每年 10 年和 52 周内,它将从 1 变为 520。但是我在数据文件中有其他变量,所以数据文件的长度不是 520。我尝试了循环(超过 week_number 和 year)和 seq_along,但没有奏效。有什么建议么?数据有 520X50(状态)和 X 5(类别)行。

Week_num year state category volume 
1       2017 AK     x       123
2       2017 AK     x       125
3       2017 AK     x       125
4       2017 AK     x       123
5       2017 AK     x       125
6       2017 AK     x       125

for (z in seq_along(1:520)){
  for (j in data$week_num){
    for (i in data$year){
   if (data$week_num==j &data$year==i) {data$trend[nrow(i)]<-z}
  }
}
}

【问题讨论】:

  • 你好 ozlem。你能创建一个最小的工作示例并根据它显示预期的输出吗?
  • 您好@ozlem,请分享您的数据样本。您可以在控制台中输入 dput(head(dataset)) 并复制输出并粘贴到您的问题中。我假设您的数据名为dataset

标签: r loops for-loop sequence


【解决方案1】:

我们可以使用row_number

library(dplyr)
df1 %>%
    mutate(rn = row_number(week_number, year))

【讨论】:

    【解决方案2】:

    我认为merge 比较合适。

    样本数据:

    dat <- data.frame(id = 1:3, year = c(2010L, 2011L, 2012L), week = c(3L, 17L, 51L))
    

    年/周数的“完整”数据集:

    yearweeks <- expand.grid(week = 1:52, year = 2010:2012)
    head(yearweeks)
    #   week year
    # 1    1 2010
    # 2    2 2010
    # 3    3 2010
    # 4    4 2010
    # 5    5 2010
    # 6    6 2010
    tail(yearweeks)
    #     week year
    # 151   47 2012
    # 152   48 2012
    # 153   49 2012
    # 154   50 2012
    # 155   51 2012
    # 156   52 2012
    

    合并,其中NA 表示最初不存在的一周。在这种情况下,iddat 中的任何其他列(如果存在)和NA(缺少年/周)将被保留。

    dat2 <- merge(dat, yearweeks, by = c("year", "week"), all = TRUE)
    head(dat2)
    #   year week id
    # 1 2010    1 NA
    # 2 2010    2 NA
    # 3 2010    3  1
    # 4 2010    4 NA
    # 5 2010    5 NA
    # 6 2010    6 NA
    tail(dat2)
    #     year week id
    # 151 2012   47 NA
    # 152 2012   48 NA
    # 153 2012   49 NA
    # 154 2012   50 NA
    # 155 2012   51  3
    # 156 2012   52 NA
    

    从这里,您可以做任何需要将年/周转换为 1-520 序列变量的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2020-08-09
      • 2021-04-30
      • 2013-03-22
      • 2014-04-07
      • 1970-01-01
      相关资源
      最近更新 更多