R: В моем фрейме данных есть 1 столбец и несколько строк, есть ли способ вычислить среднее значение для определенных подмножеств строк? - PullRequest
0 голосов
/ 06 августа 2020

Я загрузил фрейм данных, состоящий из 1 столбца и тысяч строк. Фрейм данных организован таким образом, что есть название региона, а под ним баллы, соответствующие региону.

Пример: введите описание изображения здесь

Я хочу вычислить среднее значение значений, соответствующих каждому региону.

Так, например:

Регион 1: среднее из 1,2,3,4

Область 2: среднее значение 1,2

И так далее

Я не уверен, как написать сценарий для этого и получить результат, в котором у меня есть таблица с 2 столбцами (регион, среднее значение)

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Следующий код не зависит от символьных строк, обозначающих начало групп, он зависит только от того, что они не могут быть приведены к numeri c.

Сначала набор тестовых данных.

df1 <- data.frame(x = c("A", 1:4, "B", 1:2, "C", 1:3))

Теперь группа означает.

y <- suppressWarnings(as.numeric(df1[[1]]))
i <- is.na(y)
j <- cumsum(i)
tapply(y[!i], j[!i], mean)
#  1   2   3 
#2.5 1.5 2.0 
0 голосов
/ 06 августа 2020

Вот базовая опция R

do.call(
  rbind,
  Map(
    function(v) data.frame(Region = v[1, ], Mean = mean(as.numeric(v[-1, ]))),
    split(df, cumsum(grepl("Region\\s\\d+", df$x)))
  )
)

, которая дает

    Region Mean
1 Region 1  2.5
2 Region 2  1.5
3 Region 3  2.0

Data

df <- structure(list(x = c("Region 1", "1", "2", "3", "4", "Region 2", 
"1", "2", "Region 3", "1", "2", "3")), class = "data.frame", row.names = c(NA,
-12L))
...