Объединение нескольких списков для создания фрейма данных в R - PullRequest
0 голосов
/ 29 мая 2020

Заранее приносим свои извинения, если об этом уже спрашивали в другом месте, но я пробовал разные попытки, и пока ничего не помогло.

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

    var_names <- ls(envir = globalenv(), pattern = "^Device")
    Corrected_values<- mget(var_names)

    Device_mean <- lapply(Corrected_values, mean)
    Device_max <- lapply(Corrected_values, max)
    Device_min <- lapply(Corrected_values, min)
    Device_sd <- lapply(Corrected_values, sd)

Теперь я использую sh, чтобы создать фрейм данных «Устройство», который будет объединением этих 4 списков. Этот фрейм данных (или матрица) с 4 столбцами и 23 строками можно будет экспортировать для дальнейшего использования. До сих пор все мои попытки приводили к неверной матрице.

    # rename the column names
    cols <- c("Mean", "Maximum", "Minimum", "Stdv")

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

На самом деле то, что предлагает Руи Баррадас, работает, но похоже, потому что

    f <- function(x){
      data.frame(Mean = mean(x), Maximum = max(x), Minimum = min(x), Stdv = sd(x))
    }

автоматически распознает, что «Среднее = среднее (x), Максимальное = max (x), Минимальное = min (x), Stdv = sd (x) "означает отказ от использования 4-х списков, созданных заранее в скрипте. К сожалению, это не сработает, если я буду sh добавить некоторые другие созданные списки. В самом деле, теперь представьте, что у меня есть 8 списков вместо первых 4 списков, представленных ранее:

var_names <- ls(envir = globalenv(), pattern = "^Device")
Corr_values<- mget(var_names)

Device_mean <- lapply(Corr_values, mean) #list 1
Device_max <- lapply(Corr_values, max) #list2
Device_min <- lapply(Corr_values, min) #list3
Device_sd <- lapply(Corr_values, sd) #list4

hours_per_year <- 365*24
multiply <- function(x, factor) {
x * hours_per_year}
Device_average_annual_dose <- lapply(Device_mean, multiply, factor = hours_per_year) #list5

var_names_dates <- ls(envir = globalenv(), pattern = "^Date")
Corr_dates<- mget(var_names_dates)
Device_hours_with_values <- lapply(Corr_dates, length) #list6

a <- (100/hours_per_year)
multiply <- function(x, factor) {
x * a}
Device_availability <- lapply(Device_hours_with_values, multiply, factor = a) #list7

subtract_me = 100
Device_unavailability <- lapply(Device_availability, function(x, subt_amnt) subt_amnt - x,subt_amnt = subtract_me) #list8

Эти 8 списков правильно хранятся в R, но в этом случае, когда я пытаюсь объединить то, что вы предлагаете мне 8 списков, используя 8 имен списков, я получаю сообщение об ошибке:

    Error in max(x) : invalid 'type' (list) of argument

Я не понимаю, потому что это именно некоторые списки, которые я sh должен объединить ...

0 голосов
/ 29 мая 2020

Вот базовый способ R.

var_names <- ls(envir = globalenv(), pattern = "^Device")
Corrected_values <- mget(var_names)
f <- function(x){
  data.frame(Mean = mean(x), Maximum = max(x), Minimum = min(x), Stdv = sd(x))
}

do.call(rbind, Map(f, Corrected_values))
#         Mean Maximum Minimum      Stdv
#Device1 5.006     5.8     4.3 0.3524897
#Device2 6.588     7.9     4.9 0.6358796
#Device3 5.936     7.0     4.9 0.5161711

Данные

Device1 <- iris[iris$Species == 'setosa', 'Sepal.Length']
Device2 <- iris[iris$Species == 'virginica', 'Sepal.Length']
Device3 <- iris[iris$Species == 'versicolor', 'Sepal.Length']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...