【问题标题】:modify lists based on dates根据日期修改列表
【发布时间】:2022-11-28 18:17:03
【问题描述】:

您好,我有列表数据中的列表

list1 <- list()

#date list is a "date" object
list1$date <- c("01/06/2002", "02/06/2002", "03/06/2002", 
"04/06/2002", "05/06/2002", "01/07/2002", "19/07/2002", "11/07/2002", 
               "15/07/2002", "17/07/2002", "03/07/2002")

list1$value1 <- c(100,200,300,100,200,300,100,200,300,100,200)

list1$value2 <- c(1000,2000,3000,1000,2000,3000,1000,2000,3000,1000,2000)

我想修改列表中的值,以便如果日期介于 1 和 7 之间 - 列表值会加倍。

有没有一种方法可以编写一个条件来检查列表的日期并将其他列表中的值加倍?

预期输出:

 list$value1 
 c(200,400,600,200,400,600,100,200,300,100,400)
    
 list$value2 
 c(2000,4000,6000,2000,4000,6000,1000,2000,3000,1000,4000)

【问题讨论】:

  • list$date Date 对象中的值还是字符向量?
  • 它是一个日期对象

标签: r list


【解决方案1】:

您可以获得提取前 2 个字符的日期,并使用 lapply 将日期介于 1 和 7 之间的值加倍。

inds <- as.integer(substr(list1$date, 1, 2)) <= 7
#List names that needs to be changed
nm <- c('value1', 'value2')
list1[nm] <- lapply(list1[nm], function(x) {x[inds] <- x[inds] * 2;x})
list1

#$date
# [1] "01/06/2002" "02/06/2002" "03/06/2002" "04/06/2002" "05/06/2002" "01/07/2002"
# [7] "19/07/2002" "11/07/2002" "15/07/2002" "17/07/2002" "03/07/2002"

#$value1
# [1] 200 400 600 200 400 600 100 200 300 100 400

#$value2
# [1] 2000 4000 6000 2000 4000 6000 1000 2000 3000 1000 4000

数据

数据中缺少一些引号,修复它并将列表的名称更改为 list1,因为 list 是函数的名称。

list1 <- list()
list1$date <- c("01/06/2002", "02/06/2002", "03/06/2002", 
"04/06/2002", "05/06/2002", "01/07/2002", "19/07/2002", "11/07/2002", 
               "15/07/2002", "17/07/2002", "03/07/2002")

list1$value1 <- c(100,200,300,100,200,300,100,200,300,100,200)

list1$value2 <- c(1000,2000,3000,1000,2000,3000,1000,2000,3000,1000,2000)

【讨论】:

  • list1$date 是一个日期对象。 substr 不行吧`?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 2022-10-16
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多