У меня есть матрица ниже. Как я могу разделить каждую строку с ее значением?Как нормализовать данные временных рядов в R?
TAXA 1992 1993 1994 1995
Aba 1 0 0.01 0
Abr 2 0.084 0.1 3
Amp 7 6 4 2
У меня есть матрица ниже. Как я могу разделить каждую строку с ее значением?Как нормализовать данные временных рядов в R?
TAXA 1992 1993 1994 1995
Aba 1 0 0.01 0
Abr 2 0.084 0.1 3
Amp 7 6 4 2
Используя 'tidy data' подход (я скопировал данные из вопроса в буфер обмена):
t <- read.table("clipboard", sep=" ", header=T)
library(tidyr)
library(dplyr)
t %>%
gather(year, value, -TAXA) %>%
group_by(TAXA) %>%
mutate(value=value/mean(value)) %>%
spread(year, value)
Вы получаете:
Source: local data frame [3 x 5]
TAXA X1992 X1993 X1994 X1995
1 Aba 3.960396 0.00000000 0.03960396 0.0000000
2 Abr 1.0.06481481 0.07716049 2.3148148
3 Amp 1.473684 1.26315789 0.84210526 0.4210526
Он собирает значения из множества столбцов в один. (Они получают одинаковое обращение, они должны быть в одной колонке.) Затем он вычисляет среднее значение для каждого TAXA
отдельно и переформатирует данные обратно в широкий формат.
Я думаю, что вы хотите, либо из них -
Для кадра данных:
cbind(df[1], df[-1]/rowMeans(df[-1]))
# TAXA X1992 X1993 X1994 X1995
# 1 Aba 3.960396 0.00000000 0.03960396 0.0000000
# 2 Abr 1.0.06481481 0.07716049 2.3148148
# 3 Amp 1.473684 1.26315789 0.84210526 0.4210526
Для матрицы:
m/rowMeans(m)
# 1992 1993 1994 1995
# Aba 3.960396 0.00000000 0.03960396 0.0000000
# Abr 1.0.06481481 0.07716049 2.3148148
# Amp 1.473684 1.26315789 0.84210526 0.4210526
Это находит среднее значение каждой строки делит каждую строку по соответствующему значению. Первый предполагает, что первый столбец в вашем примере - это столбец, а второй - имена строк в матрице.
данных:
df <- structure(list(TAXA = structure(1:3, .Label = c("Aba", "Abr",
"Amp"), class = "factor"), X1992 = c(1L, 2L, 7L), X1993 = c(0,
0.084, 6), X1994 = c(0.01, 0.1, 4), X1995 = c(0L, 3L, 2L)), .Names = c("TAXA",
"X1992", "X1993", "X1994", "X1995"), class = "data.frame", row.names = c(NA,
-3L))
m <- structure(c(1, 2, 7, 0, 0.084, 6, 0.01, 0.1, 4, 0, 3, 2), .Dim = 3:4, .Dimnames = list(
c("Aba", "Abr", "Amp"), c("1992", "1993", "1994", "1995"
)))