Добавить несколько временных рядов tibble в один столбец различной длины

Я пытался объединить три объекта tibble в один столбец, каждый из которых имеет данные, которые начинаются в разное время.

Попытался преобразовать их все в xts, но столкнулся с проблемой преобразования их в числовые значения из факториала.

library(xts)
ts1<-as.xts(ts(c(1:12),star=c(2014,1),freq=12))
ts2<-as.xts(ts(c(13:24),star=c(2015,1),freq=12))
ts3<-as.xts(ts(c(13:24),star=c(2014,4),freq=12))
str(ts4 <- c(ts1, ts2,ts3))

Также заглянул в виньетки, но не смог сложить их должным образом.

1 ответ

Я думаю, что это производит то, что вы ищете. param_df будет фрейм данных, который содержит N, среднее и SD для каждой пары распределений.

# Generate some fake parameters
param_df <- data.frame(n_1 = sample(50:100, 10, replace = T),
                       mean_1 = sample(5:10, 10, replace = T),
                       sd_1 = sample(1:9, 10, replace = T),
                       n_2 = sample(50:100, 10, replace = T),
                       mean_2 = sample(5:10, 10, replace = T),
                       sd_2 = sample(1:9, 10, replace = T),
                       variable_name = paste0("variable_", 1:10), 
                       stringsAsFactors = F)

# Function that will generate the distributions and calculate statistics
my_function <- function(n_1, mean_1, sd_1, n_2, mean_2, sd_2, var_name){
  samp_A <- rnorm(as.numeric(n_1), as.numeric(mean_1), as.numeric(sd_1))
  samp_B <- rnorm(as.numeric(n_2), as.numeric(mean_2), as.numeric(sd_2))
  var_score <- (mean(samp_A) + mean(samp_B)) / 2
  var_range <- sd(samp_A)
  return(c(Variable = var_name, Score = var_score, Range = var_range))
}

# Apply the function to the param_df by row, passing each column as an argument to the function
df <- apply(param_df, 1, function(params) my_function(params[1],
                                                      params[2],
                                                      params[3],
                                                      params[4],
                                                      params[5],
                                                      params[6],
                                                      params[7]))
# Convert to a dataframe
df <- as.data.frame(t(df))

Обратите внимание, что код здесь вычисляет "оценку" иначе, чем в коде выше. Я предполагаю, что вы хотели разделить сумму средних значений и добавить среднее значение A и половину среднего значения B.

Другие вопросы по тегам