R: Как я могу зациклить и агрегировать сводную статистику с изменением строк в R? - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь объединить фрейм данных, аналогичный приведенному ниже (только с большим количеством переменных), в новый, изображая описания в соответствии с группировкой переменных.Поскольку существует много переменных, я хочу зациклить процесс перекодирования.

pad_A <- rnorm(44, 0.5, 03)
pad_B <- rnorm(44, 0.7, 0.7)
pad_C <- rnorm(44, 0.2, 1.0)
sk_A  <- rbinom(44, size = 1, prob = 0.3)
sk_B  <- rbinom(44, size = 1, prob = 0.5)
sk_C  <- rbinom(44, size = 1, prob = 0.1)
df    <- cbind(pad_A, pad_B, pad_C, sk_A, sk_B, sk_C) %>% as.data.frame()

Я хочу вычислить среднее значение, стандартное отклонение, доверительные границы и количество obs для «pad_A» в соответствии со значениями «sk_A»,«Pad_B» в соответствии с «sk_B», «pad_C» в соответствии с «sk_C» и т. Д., Как в следующем коде для «pad_A»:

pad_A_df1 <- aggregate(df$pad_A, list(df$sk_A), mean, na.rm = T)
pad_A_df2 <- aggregate(df$pad_A, list(df$sk_A), sd, na.rm = T)
pad_A_df2[1] <- NULL
pad_A_df3 <- aggregate(df$pad_A, list(df$sk_A), FUN = function(x)t.test(x)$conf.int[1:2])
pad_A_df3 <- pad_A_df3[[2]]
pad_A_df3 <- as.data.frame(pad_A_df3)
pad_A_df4 <- aggregate(df$pad_A, list(df$sk_A), length)
pad_A_df4[1] <- NULL

pad_A_df <- cbind(pad_A_df1, pad_A_df2, pad_A_df3, pad_A_df4)
colnames(pad_A_df) <- c("sk_A", "Mean", "SE", "Lower CI", "Upper CI", "N")
print(pad_A_df)

Результат должен быть примерно таким же, как в «pad_A_df»´ объект.Я хочу автоматизировать приведенный выше код в цикле и применить его ко всем моим переменным, потому что, очевидно, я не хочу повторять кодирование много раз.

Но я борюсь с комбинацией агрегирования переменных,создание новых объектов, изменение и вставка строк в циклы и уже много раз воздерживались от использования циклов из-за этих проблем, решение которых я не могу найти.

Пока мне удается создавать только объекты, которые имеютправильные названия для всех дальнейших шагов, как показано ниже, но все, что я до сих пор кодировал, было чепухой.

namelist_df <- names(df)

for (i in namelist_df[1:3]) {
  for (j in 1:3){
    dfs <- paste0("pad_", i, "_df", j)
    print(dfs)
  } 
}

Любая помощь здесь очень ценится.

...