【发布时间】:2021-07-08 21:03:05
【问题描述】:
我有一个矩阵列表,我有几个不同的矩阵,我想将矩阵列表中的元素除以这些矩阵。我想按三组的顺序排列列表,并计算int1 和int2 中最小jDate 之间的差,如下所示n1、n2 和n3。然后,我想将从这些值 m1 创建的矩阵与列表中的一个矩阵分开。然后,我将向下移动到 int1 和 int2 列表中的下一组三个元素,并计算它们之间的差异,并重复与第一组三个元素相同的过程。我该怎么做呢?
library(lubridate)
library(tidyverse)
date <- rep_len(seq(dmy("26-12-2010"), dmy("20-12-2013"), by = "days"), 500)
ID <- rep(seq(1, 5), 100)
df <- data.frame(date = date,
x = runif(length(date), min = 60000, max = 80000),
y = runif(length(date), min = 800000, max = 900000),
ID)
df$jDate <- julian(as.Date(df$date), origin = as.Date('1970-01-01'))
df$Month <- month(df$date)
t1 <- c(100,150,200)
t2 <- c(200,250,350)
t3 <- c(300,350, 400)
mat <- cbind(t1,t2, t3)
t1 <- c(150,150,200)
t2 <- c(250,250,350)
t3 <- c(350,350, 400)
mat2 <- cbind(t1,t2, t3)
l1 <- list(mat, mat2)
int1 <- df %>%
# arrange(ID) %>% # skipped for readability of result
mutate(new = floor_date(date, '10 day')) %>%
mutate(new = if_else(day(new) == 31, new - days(10), new)) %>%
group_by(ID, new) %>%
filter(Month == "3") %>%
group_split()
int2 <- df %>%
# arrange(ID) %>% # skipped for readability of result
mutate(new = floor_date(date, '10 day')) %>%
mutate(new = if_else(day(new) == 31, new - days(10), new)) %>%
group_by(ID, new) %>%
filter(Month == "2") %>%
group_split()
n1 <- c(((min(int1[[1]]$jDate))- min(int2[[1]]$jDate)),
((min(int1[[1]]$jDate))- min(int2[[2]]$jDate)),
((min(int1[[1]]$jDate))- min(int2[[3]]$jDate)))
n2 <- c(((min(int1[[2]]$jDate))- min(int2[[1]]$jDate)),
((min(int1[[2]]$jDate))- min(int2[[2]]$jDate)),
((min(int1[[2]]$jDate))- min(int2[[3]]$jDate)))
n3 <- c(((min(int1[[3]]$jDate))- min(int2[[1]]$jDate)),
((min(int1[[3]]$jDate))- min(int2[[2]]$jDate)),
((min(int1[[3]]$jDate))- min(int2[[3]]$jDate)))
m1 <- cbind(n1,n2,n3)
l1[[1]]/m1
【问题讨论】:
-
我不知道如何在没有一堆重复代码的情况下制作长度为 10 个元素的
l1。即使您建议将第一个元素除以矩阵,将第二个元素除以不同的矩阵,它仍然可以让我清楚地了解如何获得所需的输出。
标签: r matrix tidyverse lubridate