Wie ändere ich Zeilenwerte basierend auf einem Spaltenwert im R-Datenrahmen?
In diesem Artikel erfahren Sie, wie Sie die Werte in Zeilen basierend auf den Spaltenwerten in Dataframe in der Programmiersprache R ändern.
Syntax: df[Ausdruck ,] <- newrowvalue
Argumente :
- df – Datenrahmen zum Simulieren der Änderung
- Ausdruck – Ausdruck zum Auswerten der Zellendaten basierend auf einem Spaltenwert
- newrowvalue – Der geänderte Wert, durch den der alte Wert ersetzt werden soll
Returns : Gibt nichts zurück, nimmt aber Änderungen am Datenrahmen vor.
Das folgende Code-Snippet ist ein Beispiel für das Ändern des Zeilenwerts basierend auf einem Spaltenwert in R. Es prüft, ob in der C3-Spalte der Zellenwert kleiner als 11 ist, es ersetzt den entsprechenden Zeilenwert und behält die Spalte mit NA bei. Dieser Ansatz benötigt eine quadratische Zeit, die den Abmessungen des Datenrahmens entspricht.
Beispiel:
R
# declaring a data frame in R data_frame = data.frame(C1= c(5:8),C2 = c(1:4), C3 = c(9:12),C4 =c(13:16)) print("Original data frame") print(data_frame) # replace the row value with NA if the col # value in C3 is less than 11 looping over # the data frame values for (i in 1:nrow(data_frame)){ for(j in 1:ncol(data_frame)) { # checking if the column is C3 that is # j index is 3 if(j==3){ # checking if the row value of c3 is # less than 11 if(data_frame[i,j]<11){ # changing the row value in the # data frame data_frame[i,j] <- NA } } } } # printing modified data frame print ("Modified data frame") print (data_frame)
Ausgabe:
[1] „Originaldatenrahmen“
C1 C2 C3 C4
1 5 1 9 13
2 6 2 10 14
3 7 3 11 15
4 8 4 12 16
[1] „Geänderter Datenrahmen“
C1 C2 C3 C4
1 5 1 nicht zutreffend 13
2 6 2 nicht zutreffend 14
3 7 3 11 15
4 8 4 12 16
Dieser Ansatz kann optimiert werden, falls wir den Indexwert der Spalte kennen, um die Auswertung durchzuführen. In diesem Fall iterieren wir nicht über den gesamten Datenrahmen, sondern nur über die Spaltenwerte.
Beispiel:
R
# declaring a data frame in R data_frame = data.frame(C1= c(5:8),C2 = c(1:4), C3 = c(9:12),C4 =c(13:16)) print("Original data frame") print(data_frame) # replace the row value with 0 if the # data element at col index 2 is divisible # by 2 looping over the rows of data frame for (i in 1:nrow(data_frame)){ # iterate over the 2nd column only of the # data frame and check if divisible by 2 if(data_frame[i,2]%%2){ # replace the value with 0 data_frame[i,2]<-0 } } # printing modified data frame print ("Modified data frame") print (data_frame)
Ausgabe:
[1] „Originaldatenrahmen“
C1 C2 C3 C4
1 5 1 9 13
2 6 2 10 14
3 7 3 11 15
4 8 4 12 16
[1] „Geänderter Datenrahmen“
C1 C2 C3 C4
1 5 0 9 13
2 6 2 10 14
3 7 0 11 15
4 8 4 12 16
R bietet auch eine integrierte Möglichkeit, diese Zeilentransformationen zu handhaben, indem einfach die auszuwertende Bedingung als Zeilenindex des Datenrahmens angegeben wird. Die neu zugewiesenen Werte werden innerhalb des Datenrahmens ersetzt. Eine explizite Iteration über den Datenrahmen ist in diesem Fall nicht erforderlich.
Beispiel:
R
# declaring a data frame in R data_frame = data.frame(C1= c(1,2,2,1),C2 = c(1:4), C3 = c(9:12),C4 =c(13:16)) print("Original data frame") print(data_frame) # check if c1 value is greater than # equal to 1, replaced by 3 data_frame[data_frame$C1>=1 ,] <- 3 print("Modified data frame") print(data_frame)
Ausgabe:
[1] „Originaldatenrahmen“
C1 C2 C3 C4
1 1 1 9 13
2 2 2 10 14
3 2 3 11 15
4 1 4 12 16
[1] „Geänderter Datenrahmen“
C1 C2 C3 C4
1 3 3 3 3
2 3 3 3 3
3 3 3 3 3
4 3 3 3 3