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)))
每个
[,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