Рассчитать минимальное среднее значение для строк, в которых несколько столбцов имеют одинаковые значения - PullRequest
0 голосов
/ 28 марта 2019

В приведенном ниже наборе данных я хочу сначала проверить, какие строки имеют одинаковое значение для обоих столбцов U и T. Для всех таких строк я хочу вычислить среднее значение столбца Mean, минимальное значение столбца Min и максимальное значение столбца Max.

Я могу сделать это легко, если строки с одинаковыми значениями столбцов U и T являются отдельными data.frame(), но для этого случая мне сначала нужно извлечь все такие под data.frame() с помощью data.frame() и затем выполните операцию.

Если у кого-то есть лучший подход с использованием библиотек R, пожалуйста, предложите?

Входные данные

data <- structure(list(A = c(0.1, 0.1, 0.1, 0.1), B = c(NA, NA, NA, NA
), C = structure(c(1L, 1L, 1L, 1L), .Label = "Yes", class = "factor"), 
    U = c(11L, 11L, 11L, 11L), T = structure(c(1L, 1L, 1L, 1L
    ), .Label = "A", class = "factor"), P = structure(c(1L, 1L, 
    1L, 1L), .Label = "INT", class = "factor"), Q = 1:4, R = c(0L, 
    0L, 0L, 0L), S = c(1L, 1L, 1L, 1L), W = structure(c(1L, 1L, 
    1L, 1L), .Label = "A", class = "factor"), Mean = c(21.208, 
    21.22333333, 21.23666667, 21.174), Min = c(21.02, 21.01, 
    21.09, 21.02), Max = c(21.35, 21.39, 21.47, 21.36)), class = "data.frame", row.names = c(NA, 
-4L))

Ожидаемый результат

A   B   C   U   T   P   Q   R   S   T   Mean    Min     Max
0.1 NA  Yes 11  A   INT 4   0   1   A   21.2105 21.01   21.47

Ответы [ 2 ]

1 голос
/ 28 марта 2019
nm = names(data)[!names(data) %in% c("Mean", "Min", "Max")]
do.call(rbind, lapply(split(data, paste(data$U, data$T)), function(x){
    data.frame(x[1, nm], Mean = mean(x$Mean), Min = min(x$Min), Max = max(x$Max))
}))
#       A  B   C  U T   P Q R S W    Mean   Min   Max
#11 A 0.1 NA Yes 11 A INT 1 0 1 A 21.2105 21.01 21.47
1 голос
/ 28 марта 2019

Мы можем использовать

library(tidyverse)
data %>% 
  group_by(U, T) %>%
  mutate(Mean = mean(Mean), Min = min(Min), Max = max(Max))%>% 
  slice(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...