Luigi Marongiu
2021-Sep-02 13:35 UTC
[R] Loop over columns of dataframe and change values condtionally
Hello, it is possible to select the columns of a dataframe in sequence with: ``` for(i in 1:ncol(df)) { df[ , i] } # or for(i in 1:ncol(df)) { df[ i] } ``` And change all values with, for instance: ``` for(i in 1:ncol(df)) { df[ , i] <- df[ , i] + 10 } ``` Is it possible to apply a condition? What would be the syntax? For instance, to change all 0s in a column to NA would `df[i][df[i =0] = NA` be right? Thank you -- Best regards, Luigi
PIKAL Petr
2021-Sep-02 13:51 UTC
[R] Loop over columns of dataframe and change values condtionally
Hi you could operate with whole data frame (sometimes) 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 chenge all> head(iris[,1:4]+10)Sepal.Length Sepal.Width Petal.Length Petal.Width 1 15.1 13.5 11.4 10.2 2 14.9 13.0 11.4 10.2 3 14.7 13.2 11.3 10.2 4 14.6 13.1 11.5 10.2 5 15.0 13.6 11.4 10.2 6 15.4 13.9 11.7 10.4 change only some> iris[,1:4][iris[,1:4]<2] <- iris[,1:4][iris[,1:4]<2]+10 > head(iris)Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 11.4 10.2 setosa 2 4.9 3.0 11.4 10.2 setosa 3 4.7 3.2 11.3 10.2 setosa 4 4.6 3.1 11.5 10.2 setosa 5 5.0 3.6 11.4 10.2 setosa 6 5.4 3.9 11.7 10.4 setosa Cheers Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Luigi Marongiu > Sent: Thursday, September 2, 2021 3:35 PM > To: r-help <r-help at r-project.org> > Subject: [R] Loop over columns of dataframe and change values condtionally > > Hello, > it is possible to select the columns of a dataframe in sequence with: > ``` > for(i in 1:ncol(df)) { > df[ , i] > } > # or > for(i in 1:ncol(df)) { > df[ i] > } > ``` > And change all values with, for instance: > ``` > for(i in 1:ncol(df)) { > df[ , i] <- df[ , i] + 10 > } > ``` > Is it possible to apply a condition? What would be the syntax? > For instance, to change all 0s in a column to NA would `df[i][df[i == 0] NA` > be right? > Thank you > > > -- > Best regards, > Luigi > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code.
Rui Barradas
2021-Sep-02 14:01 UTC
[R] Loop over columns of dataframe and change values condtionally
Hello, In the particular case you have, to change to NA based on condition, use `is.na<-`. Here is some test data, 3 times the same df. set.seed(2021) df3 <- df2 <- df1 <- data.frame( x = c(0, 0, 1, 2, 3), y = c(1, 2, 3, 0, 0), z = rbinom(5, 1, prob = c(0.25, 0.75)), a = letters[1:5] ) # change all columns is.na(df1) <- df1 == 0 df1 # only one column is.na(df2[, 2]) <- df2[, 2] == 0 df2 # change several columns given by an index is.na(df3[c(1, 3)]) <- df3[c(1, 3)] == 0 df3 Hope this helps, Rui Barradas ?s 14:35 de 02/09/21, Luigi Marongiu escreveu:> Hello, > it is possible to select the columns of a dataframe in sequence with: > ``` > for(i in 1:ncol(df)) { > df[ , i] > } > # or > for(i in 1:ncol(df)) { > df[ i] > } > ``` > And change all values with, for instance: > ``` > for(i in 1:ncol(df)) { > df[ , i] <- df[ , i] + 10 > } > ``` > Is it possible to apply a condition? What would be the syntax? > For instance, to change all 0s in a column to NA would `df[i][df[i => 0] = NA` be right? > Thank you > >