Eine anleitung zu apply(), lapply(), sapply() und tapply() in r


In diesem Tutorial werden die Unterschiede zwischen den integrierten R-Funktionen apply() , sapply() , lapply() und tapply() erläutert, zusammen mit Beispielen, wann und wie die einzelnen Funktionen verwendet werden.

anwenden()

Verwenden Sie die Funktion apply() , wenn Sie eine Funktion auf die Zeilen oder Spalten einer Matrix oder eines Datenrahmens anwenden möchten.

Die grundlegende Syntax der Funktion apply() lautet:

anwenden (X, MARGIN, FUN)

  • X ist der Name des Arrays oder Datenblocks
  • MARGIN gibt an, auf welcher Dimension eine Operation ausgeführt werden soll (1 = Zeile, 2 = Spalte).
  • FUN ist die spezifische Operation, die Sie ausführen möchten (z. B. Min., Max., Summe, Durchschnitt usw.).

Der folgende Code zeigt mehrere Beispiele von apply() in Aktion.

 #create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
                   b = c(4, 4, 6, 7, 8),
                   c = c(14, 15, 11, 10, 6))
data

#abc
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6

#find the sum of each row
apply(data, 1, sum)

#[1] 19 22 24 29 23

#find the sum of each column
apply(data, 2, sum)

#abc
#32 29 56 

#find the mean of each row
apply(data, 1, mean)

#[1] 6.333333 7.333333 8.000000 9.666667 7.666667

#find the mean of each column, rounded to one decimal place
round(apply(data, 2, mean), 1)

#abc
#6.4 5.8 11.2 

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

#[1] 6.806859 6.658328 2.645751 2.516611 1.527525

#find the standard deviation of each column
apply(data, 2, sd)

#abc
#4.449719 1.788854 3.563706 

anwenden()

Verwenden Sie die Funktion lapply() , wenn Sie eine Funktion auf jedes Element einer Liste, eines Vektors oder eines Datenrahmens anwenden und als Ergebnis eine Liste erhalten möchten.

Die grundlegende Syntax der Funktion lapply() lautet:

lapply(X, FUN)

  • X ist der Name der Liste, des Vektors oder des Datenrahmens
  • FUN ist der spezifische Vorgang, den Sie ausführen möchten

Der folgende Code zeigt mehrere Beispiele für die Verwendung von lapply() für Spalten in einem Datenrahmen.

 #create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
                   b = c(4, 4, 6, 7, 8),
                   c = c(14, 15, 11, 10, 6))
data

#abc
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6

#find mean of each column and return results as a list
apply(data, mean)

#$a
# [1] 6.4
#
# $b
# [1] 5.8
#
# $c
# [1] 11.2

#multiply values in each column by 2 and return results as a list
lapply(data, function(data) data*2)

#$a
# [1] 2 6 14 24 18
#
# $b
# [1] 8 8 12 14 16
#
# $c
# [1] 28 30 22 20 12

Wir können lapply() auch verwenden, um Operationen an Listen durchzuführen. Die folgenden Beispiele zeigen, wie das geht.

 #create a list
x <- list(a=1, b=1:5, c=1:10) 
x

#$a
# [1] 1
#
# $b
# [1] 1 2 3 4 5
#
# $c
# [1] 1 2 3 4 5 6 7 8 9 10

#find the sum of each element in the list
lapply(x, sum)

#$a
# [1] 1
#
# $b
# [1] 15
#
# $c
#[1]55

#find the mean of each element in the list
lapply(x, mean)

#$a
# [1] 1
#
# $b
# [1] 3
#
# $c
# [1] 5.5

#multiply values of each element by 5 and return results as a list
lapply(x, function(x) x*5)

#$a
# [1] 5
#
# $b
# [1] 5 10 15 20 25
#
# $c
# [1] 5 10 15 20 25 30 35 40 45 50

anwenden()

Verwenden Sie die Funktion sapply() , wenn Sie eine Funktion auf jedes Element einer Liste, eines Vektors oder eines Datenrahmens anwenden und so einen Vektor anstelle einer Liste erhalten möchten.

Die grundlegende Syntax der Funktion sapply() lautet:

anwenden (X, SPASS)

  • X ist der Name der Liste, des Vektors oder des Datenrahmens
  • FUN ist der spezifische Vorgang, den Sie ausführen möchten

Der folgende Code zeigt mehrere Beispiele für die Verwendung von sapply() für Spalten in einem Datenrahmen.

 #create a data frame with three columns and five rows
data <- data.frame(a = c(1, 3, 7, 12, 9),
                   b = c(4, 4, 6, 7, 8),
                   c = c(14, 15, 11, 10, 6))
data

#abc
#1 1 4 14
#2 3 4 15
#3 7 6 11
#4 12 7 10
#5 9 8 6

#find mean of each column and return results as a vector
sapply(data, mean)

#abc
#6.4 5.8 11.2 

#multiply values in each column by 2 and return results as a matrix
sapply(data, function(data) data*2)

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

Wir können sapply() auch verwenden, um Operationen an Listen auszuführen. Die folgenden Beispiele zeigen, wie das geht.

 #create a list
x <- list(a=1, b=1:5, c=1:10) 
x

#$a
# [1] 1
#
# $b
# [1] 1 2 3 4 5
#
# $c
# [1] 1 2 3 4 5 6 7 8 9 10

#find the sum of each element in the list
sapply(x, sum)

#abc
#1 15 55 

#find the mean of each element in the list
sapply(x, mean)

#abc
#1.0 3.0 5.5

klopfen()

Verwenden Sie die Funktion tapply() , wenn Sie eine Funktion auf Teilmengen eines Vektors anwenden möchten und die Teilmengen durch einen anderen Vektor, normalerweise einen Faktor, definiert werden.

Die grundlegende Syntax der Funktion tapply() lautet:

tap(X, INDEX, FUN)

  • X ist der Name des Objekts, normalerweise ein Vektor
  • INDEX ist eine Liste von einem oder mehreren Faktoren
  • FUN ist der spezifische Vorgang, den Sie ausführen möchten

Der folgende Code zeigt ein Beispiel für die Verwendung von tapply() für den in die Iris eingebetteten R-Datensatz .

 #view first six lines of iris dataset
head(iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa

#find the max Sepal.Length of each of the three Species
tapply(iris$Sepal.Length, iris$Species, max)

#setosa versicolor virginica 
#5.8 7.0 7.9 

#find the mean Sepal.Width of each of the three Species
tapply(iris$Sepal.Width, iris$Species, mean)

# setosa versicolor virginica 
# 3,428 2,770 2,974

#find the minimum Petal.Width of each of the three Species
tapply(iris$Petal.Width, iris$Species, min)

# setosa versicolor virginica 
#0.1 1.0 1.4 

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert