R语言 根据日期修改列表

zengzsys  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(133)

你好我有一个列表数据

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)
ndasle7k

ndasle7k1#

您可以通过提取前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)
osh3o9ms

osh3o9ms2#

您可以使用as.numeric(strftime())来撷取日期,并以ifelse()有条件地取代值:
第一个

相关问题