У меня есть следующий список (каждый элемент - это фрейм данных). Время отклика $ E9 1: 0,0 0,00000000 2: 0,2 0,00826733 3: 0,4 0,01416873 4: 0,6 0,00845066 5: 0,8 0,01258872 6: 1,0 0,01097368 $ F12 ...

0
sophia 23 Янв 2021 в 05:49

2 ответа

Лучший ответ

Если ваш список называется list_df, а числовой вектор - vec, мы можем использовать Map как:

list_df[names(vec)] <- Map(function(x, y) transform(x, response = response * y), 
                           list_df[names(vec)], vec)

list_df
#$E9
#  time response
#1  0.0 0.000000
#2  0.2 0.008267
#3  0.4 0.014169
#4  0.6 0.008451
#5  0.8 0.012589
#6  1.0 0.010974

#$F12
#  time response
#1  0.0 0.000000
#2  0.2 0.007272
#3  0.4 0.008930
#4  0.6 0.007641
#5  0.8 0.008128
#6  1.0 0.007029

#$H1
#  time  response
#1  0.0  0.000000
#2  0.2  0.001551
#3  0.4 -0.004554
#4  0.6  0.003939
#5  0.8  0.003066
#6  1.0 -0.003191

данные

list_df <- list(E9 = structure(list(time = c(0, 0.2, 0.4, 0.6, 0.8, 1), 
    response = c(0, 0.00826733, 0.01416873, 0.00845066, 0.01258872, 
    0.01097368)), class = "data.frame", row.names = c(NA, -6L
)), F12 = structure(list(time = c(0, 0.2, 0.4, 0.6, 0.8, 1), 
    response = c(0, 0.00703381, 0.00863728, 0.00739067, 0.00786157, 
    0.00679848)), class = "data.frame", row.names = c(NA, -6L
)), H1 = structure(list(time = c(0, 0.2, 0.4, 0.6, 0.8, 1), response = c(0, 
0.00142469, -0.00418229, 0.00361758, 0.00281592, -0.00293035)), 
class = "data.frame", row.names = c(NA, -6L)))

vec <- c(F12 = 1.033911, H1= 1.088928)
2
Ronak Shah 23 Янв 2021 в 03:03

Предполагая, что у вас есть данные, которые вы описываете в списке под названием original_list, и вектор с коэффициентами масштабирования в векторе под названием scales:

library(tidyverse)

tibble(scale_factors = scales, key = names(scales)) -> 
  scale_factors

tibble(
  values = list,
  key = names(list)) %>%
 left_join(scale_factors) %>%
 mutate(scaled_data = map2(
  .x = values,
  .y = scale_factors,
  ~ mutate(.x, response = response * .y)) ->
 processed_data
0
Pedro Cavalcante 23 Янв 2021 в 04:48