Как применить функцию к каждой строке в матрице или фрейме данных в R


Вы можете использовать функцию apply() , чтобы применить функцию к каждой строке в матрице или фрейме данных в R.

Эта функция использует следующий базовый синтаксис:

применить(X, MARGIN, FUN)

куда:

  • X: Имя матрицы или фрейма данных.
  • MARGIN: Размер для выполнения операции. Используйте 1 для строки, 2 для столбца.
  • FUN: функция для применения.

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1. Применение функции к каждой строке матрицы

Предположим, у нас есть следующая матрица в R:

#create matrix
mat <- matrix(1:15, nrow= 3 )

#view matrix
mat

 [,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15

Мы можем использовать функцию apply() для применения различных функций к строкам матрицы:

#find mean of each row
apply(mat, 1, mean)

[1] 7 8 9

#find sum of each row
apply(mat, 1, sum)

[1] 35 40 45

#find standard deviation of each row
apply(mat, 1, sd)

[1] 4.743416 4.743416 4.743416

#multiply the value in each row by 2 (using t() to transpose the results)
t(apply(mat, 1, function (x) x \* 2))

 [,1] [,2] [,3] [,4] [,5]
[1,] 2 8 14 20 26
[2,] 4 10 16 22 28
[3,] 6 12 18 24 30

#normalize every row to 1 (using t() to transpose the results)
t(apply(mat, 1, function (x) x / sum(x) ))

 [,1] [,2] [,3] [,4] [,5]
[1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286
[2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000
[3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333

Обратите внимание, что если вы хотите найти среднее значение или сумму каждой строки, быстрее использовать встроенные функции rowMeans() или rowSums() :

#find mean of each row
rowMeans(mat)

[1] 7 8 9

#find sum of each row
rowSums(mat)

[1] 35 40 45

Пример 2. Применение функции к каждой строке во фрейме данных

Предположим, у нас есть следующая матрица в R:

#create data frame
df <- data.frame(var1=1:3,
 var2=4:6,
 var3=7:9,
 var4=10:12,
 var5=13:15)

#view data frame
df

 var1 var2 var3 var4 var5
1 1 4 7 10 13
2 2 5 8 11 14
3 3 6 9 12 15

Мы можем использовать функцию apply() для применения различных функций к строкам фрейма данных:

#find mean of each row
apply(df, 1, mean)

[1] 7 8 9

#find sum of each row
apply(df, 1, sum)

[1] 35 40 45

#find standard deviation of each row
apply(df, 1, sd)

[1] 4.743416 4.743416 4.743416

#multiply the value in each row by 2 (using t() to transpose the results)
t(apply(df, 1, function (x) x \* 2))

 var1 var2 var3 var4 var5
[1,] 2 8 14 20 26
[2,] 4 10 16 22 28
[3,] 6 12 18 24 30

#normalize every row to 1 (using t() to transpose the results)
t(apply(df, 1, function (x) x / sum(x) ))

 var1 var2 var3 var4 var5
[1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286
[2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000
[3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333

Подобно матрицам, если вы хотите найти среднее значение или сумму каждой строки, быстрее использовать встроенные функции rowMeans() или rowSums() :

#find mean of each row
rowMeans(df)

[1] 7 8 9

#find sum of each row
rowSums(df)

[1] 35 40 45

Дополнительные ресурсы

Как получить номера строк в R
Как выполнить функцию СЧЁТЕСЛИ в R
Как выполнить функцию СУММЕСЛИ в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.