Dear Rui; Hi. I used your codes, but it seems it didn't work for me. > pat <- c("_esmdes|_Des Section|0") > dim(data2) [1] 281549 9 > grep(pat, data2$Layer) > dim(data2) [1] 281549 9
What does grep function do? I expected the function to remove 3 rows of the dataframe. I do not know the reason. On Mon, Jun 12, 2023 at 5:16 PM Rui Barradas <ruipbarra...@sapo.pt> wrote: > Às 23:13 de 12/06/2023, javad bayat escreveu: > > Dear Rui; > > Many thanks for the email. I tried your codes and found that the length > of > > the "Values" and "Names" vectors must be equal, otherwise the results > will > > not be useful. > > For some of the characters in the Layer column that I do not need to be > > filled in the LU column, I used "NA". > > But I need to delete some of the rows from the table as they are useless > > for me. I tried this code to delete entire rows of the dataframe which > > contained these three value in the Layer column: It gave me the following > > error. > > > >> data3 = data2[-grep(c("_esmdes","_Des Section","0"), data2$Layer),] > > Warning message: > > In grep(c("_esmdes", "_Des Section", "0"), data2$Layer) : > > argument 'pattern' has length > 1 and only the first element will > be > > used > > > >> data3 = data2[!grepl(c("_esmdes","_Des Section","0"), data2$Layer),] > > Warning message: > > In grepl(c("_esmdes", "_Des Section", "0"), data2$Layer) : > > argument 'pattern' has length > 1 and only the first element will be > > used > > > > How can I do this? > > Sincerely > > > > > > > > > > > > > > > > > > > > > > On Sun, Jun 11, 2023 at 5:03 PM Rui Barradas <ruipbarra...@sapo.pt> > wrote: > > > >> Às 13:18 de 11/06/2023, Rui Barradas escreveu: > >>> Às 22:54 de 11/06/2023, javad bayat escreveu: > >>>> Dear Rui; > >>>> Many thanks for your email. I used one of your codes, > >>>> "data2$LU[which(data2$Layer == "Level 12")] <- "Park"", and it works > >>>> correctly for me. > >>>> Actually I need to expand the codes so as to consider all "Levels" in > >> the > >>>> "Layer" column. There are more than hundred levels in the Layer > column. > >>>> If I use your provided code, I have to write it hundred of time as > >> below: > >>>> data2$LU[which(data2$Layer == "Level 1")] <- "Park"; > >>>> data2$LU[which(data2$Layer == "Level 2")] <- "Agri"; > >>>> ... > >>>> ... > >>>> ... > >>>> . > >>>> Is there any other way to expand the code in order to consider all of > >> the > >>>> levels simultaneously? Like the below code: > >>>> data2$LU[which(data2$Layer == c("Level 1","Level 2", "Level 3", ...))] > >> <- > >>>> c("Park", "Agri", "GS", ...) > >>>> > >>>> > >>>> Sincerely > >>>> > >>>> > >>>> > >>>> > >>>> On Sun, Jun 11, 2023 at 1:43 PM Rui Barradas <ruipbarra...@sapo.pt> > >>>> wrote: > >>>> > >>>>> Às 21:05 de 11/06/2023, javad bayat escreveu: > >>>>>> Dear R users; > >>>>>> I am trying to fill a column based on a specific value in another > >>>>>> column > >>>>> of > >>>>>> a dataframe, but it seems there is a problem with the codes! > >>>>>> The "Layer" and the "LU" are two different columns of the dataframe. > >>>>>> How can I fix this? > >>>>>> Sincerely > >>>>>> > >>>>>> > >>>>>> for (i in 1:nrow(data2$Layer)){ > >>>>>> if (data2$Layer == "Level 12") { > >>>>>> data2$LU == "Park" > >>>>>> } > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>> Hello, > >>>>> > >>>>> There are two bugs in your code, > >>>>> > >>>>> 1) the index i is not used in the loop > >>>>> 2) the assignment operator is `<-`, not `==` > >>>>> > >>>>> > >>>>> Here is the loop corrected. > >>>>> > >>>>> for (i in 1:nrow(data2$Layer)){ > >>>>> if (data2$Layer[i] == "Level 12") { > >>>>> data2$LU[i] <- "Park" > >>>>> } > >>>>> } > >>>>> > >>>>> > >>>>> > >>>>> But R is a vectorized language, the following two ways are the > idiomac > >>>>> ways of doing what you want to do. > >>>>> > >>>>> > >>>>> > >>>>> i <- data2$Layer == "Level 12" > >>>>> data2$LU[i] <- "Park" > >>>>> > >>>>> # equivalent one-liner > >>>>> data2$LU[data2$Layer == "Level 12"] <- "Park" > >>>>> > >>>>> > >>>>> > >>>>> If there are NA's in data2$Layer it's probably safer to use ?which() > in > >>>>> the logical index, to have a numeric one. > >>>>> > >>>>> > >>>>> > >>>>> i <- which(data2$Layer == "Level 12") > >>>>> data2$LU[i] <- "Park" > >>>>> > >>>>> # equivalent one-liner > >>>>> data2$LU[which(data2$Layer == "Level 12")] <- "Park" > >>>>> > >>>>> > >>>>> Hope this helps, > >>>>> > >>>>> Rui Barradas > >>>>> > >>>> > >>>> > >>> Hello, > >>> > >>> You don't need to repeat the same instruction 100+ times, there is a > way > >>> of assigning all new LU values at the same time with match(). > >>> This assumes that you have the new values in a vector. > >> > >> Sorry, this is not clear. I mean > >> > >> > >> This assumes that you have the new values in a vector, the vector Names > >> below. The vector of values to be matched is created from the data. > >> > >> > >> Rui Barradas > >> > >>> > >>> > >>> Values <- sort(unique(data2$Layer)) > >>> Names <- c("Park", "Agri", "GS") > >>> > >>> i <- match(data2$Layer, Values) > >>> data2$LU <- Names[i] > >>> > >>> > >>> Hope this helps, > >>> > >>> Rui Barradas > >>> > >>> ______________________________________________ > >>> R-help@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. > >> > >> > > > Hello, > > Please cc the r-help list, R-Help is threaded and this can in the future > be helpful to others. > > You can combine several patters like this: > > > pat <- c("_esmdes|_Des Section|0") > grep(pat, data2$Layer) > > or, programatically, > > > pat <- paste(c("_esmdes","_Des Section","0"), collapse = "|") > > > Hope this helps, > > Rui Barradas > > -- Best Regards Javad Bayat M.Sc. Environment Engineering Alternative Mail: bayat...@yahoo.com [[alternative HTML version deleted]] ______________________________________________ R-help@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.