将非标准列表转换为标准矩阵格式

问题描述 投票:0回答:1
t=2,4,6,8

矩阵格式?我可以用

mxn
填充空白,但理想情况下我想将缺失的值算。
示例:
NA
例如,一个例子,我的第一个元素具有两个值,而第二个元素有四个值,范围从:
ids <- c(1:5)

# create a time-based function that generates a new value based on previous value
age_fn <- function(prior_value, age)
{
  new_value = prior_value - 1.2*age
  return(new_value)
}

my_list <- list()
for(i in 1:length(ids))
{
  # how many records for this id?
  N <- sample(c(2:4), 1, replace=TRUE)
  
  # for each record, assign a time-step
  time_step <- sample(c(1:3), N-1, replace=TRUE) # minus 1 because first record is at t=0
  # define time when values are recorded
  t <- rep(0, times=N)
  for(n in 2:N)
  {
    t[n] <- t[n-1] + time_step[n-1]
  }
  
  # assign values recorded at each time
  value <- rep(100, times=N)
  for(n in 2:N)
  {
    value[n] <- age_fn(value[n-1], t[n])
  }
  
  my_list[[i]] <- list(ids[i], t, value)
}

t=0 to t=8
我希望它作为2x9矩阵
> my_list [[1]] [[1]][[1]] [1] 1 [[1]][[2]] [1] 0 1 [[1]][[3]] [1] 100.0 98.8 [[2]] [[2]][[1]] [1] 2 [[2]][[2]] [1] 0 3 5 8 [[2]][[3]] [1] 100.0 96.4 90.4 80.8

,其值(或

[element, t]
)填充在它们不存在的非标准格式的地方:

NA

你很容易做
          0     1     2    3    4    5    6    7    8
values1 100  98.8  98.8 98.8 98.8 98.8 98.8 98.8 98.8
values2 100 100.0 100.0 96.4 96.4 90.4 90.4 90.4 80.8

lapply(my_list, \(x) {
  v = rep(NA, 10)
  i = x[[2]]
  v[replace(i, i==0, 1)] = x[[3]]
  v }) |> 
  do.call(what='rbind') |> 
  `row.names<-`(paste0('values',  sapply(my_list, '[[', 1)))
r matrix time-series
1个回答
0
投票

每个

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] values1 100.0 97.6 NA NA 91.6 NA NA 82 NA NA values2 100.0 97.6 94 NA NA NA NA NA NA NA values3 98.8 NA NA NA NA NA NA NA NA NA values4 100.0 97.6 NA NA NA NA NA NA NA NA values5 98.8 96.4 NA 91.6 NA NA NA NA NA NA
,最大十个值
没有复制的ach
t

,每个列表元素都与
    t
  • ,但是,这与您提供的值不符。请澄清一下,以便我们推荐一种适当的插补技术。
        
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.