Re: [R] About change columns and specific rows in R
Thanks for all your help. It works now. On Tue, May 23, 2017 at 1:34 AM, William Michels via R-help < r-help@r-project.org> wrote: > Hi Ivan, > > I was just writing a follow-up note as your note came in. While the > code I posted previously works fine, using which() is unnecessary. > > > DF <- read.csv("~/lily.csv") > > DF$product1_1 <- NA > > DF$product1_1 <- DF[DF$month == 1, "product1"]*3.1 > Error in `$<-.data.frame`(`*tmp*`, "product1_1", value = c(55.8, 58.9, : > replacement has 4 rows, data has 7 > > DF$product1_1 <- DF[which(DF$month == 1), "product1"]*3.1 > Error in `$<-.data.frame`(`*tmp*`, "product1_1", value = c(55.8, 58.9, : > replacement has 4 rows, data has 7 > > DF[DF$month == 1, "product1_1"] <- DF[DF$month == 1, "product1"]*3.1 > > DF > year month day product1 product2 product3 product1_1 > 1 1981 1 1 18 56 20 55.8 > 2 1981 1 2 19 45 22 58.9 > 3 1981 1 3 16 48 28 49.6 > 4 1981 1 4 19 50 21 58.9 > 5 1981 2 1 17 49 25 NA > 6 1981 2 2 20 47 23 NA > 7 1981 2 3 21 52 27 NA > > > > The two errors above were caused because I failed to specify rows on > the left hand side of the assignment operator, not because I failed to > use which(). Once rows and columns are specified on both sides, the > assignment works fine. > > (I do however, prefer to create an "NA" column first. Personal preference > ;-). > > Best Regards, > > Bill. > > > > On Mon, May 22, 2017 at 11:57 PM, Ivan Calandrawrote: > > Hi, > > > > Actually, you don't need to create the column first, nor to use which: > > DF[DF$month==1, "product1_1"] = DF[DF$month==1, "product1"] * 3.1 > > > > The "[" is a great tool that you need to learn. In this case, you don't > need > > to combine "[" and $: within the square brackets, the vector before the > > comma indexes the rows and the one after the comma indexes the columns. > > > > The other thing you were missing correctly referencing the rows. You > have to > > specify the data.frame you want to look into. > > > > And last, learn to use dput() to provide a nice reproducible example. > > > > HTH, > > Ivan > > > > > > -- > > Dr. Ivan Calandra > > TraCEr, Laboratory for Traceology and Controlled Experiments > > MONREPOS Archaeological Research Centre and > > Museum for Human Behavioural Evolution > > Schloss Monrepos > > 56567 Neuwied, Germany > > +49 (0) 2631 9772-243 > > https://www.researchgate.net/profile/Ivan_Calandra > > > > On 23/05/2017 08:45, William Michels via R-help wrote: > >> > >> Hi Lily, > >> > >> You're on the right track, but you should define a new column first > >> (filled with NA values), then specify the precise rows and columns on > >> both the left and right hand sides of the assignment operator that > >> will be altered. Luckily, this is pretty easy...just remember to use > >> which() on the right hand side of the assignment operator to get the > >> index of the rows you want. Example below for "product1": > >> > >>> DF$product1_1 <- NA > >>> DF[DF$month == 1, "product1_1"] <- DF[which(DF$month == 1), > >>> "product1"]*3.1 > >>> > >> > >> HTH, > >> > >> Bill. > >> > >> William Michels, Ph.D. > >> > >> > >> > >> > >> On Mon, May 22, 2017 at 9:56 PM, lily li wrote: > >>> > >>> Hi R users, > >>> > >>> I have a question about manipulating the dataframe. I want to create a > >>> new > >>> dataframe, and to multiply rows with different seasons for different > >>> constants. > >>> > >>> DF > >>> year month day product1 product2 product3 > >>> 1981 1 1 18 5620 > >>> 1981 1 2 19 4522 > >>> 1981 1 3 16 4828 > >>> 1981 1 4 19 5021 > >>> 1981 2 1 17 4925 > >>> 1981 2 2 20 4723 > >>> 1981 2 3 21 5227 > >>> > >>> For example, how to multiply product1 in month1 by 3.1, and to multiply > >>> product3 in month2 by 2.0? I wrote the code like this but does not > work. > >>> Thanks for your help. > >>> > >>> DF['month'==1, ]$product1_1 = DF['month'==1, ]$product1 * 3.1; > >>> DF['month'==2, ]$product3_1 = DF['month'==1, ]$product3 * 2.0; > >>> > >>> [[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. > >> > >> __ > >>
Re: [R] About change columns and specific rows in R
Hi Ivan, I was just writing a follow-up note as your note came in. While the code I posted previously works fine, using which() is unnecessary. > DF <- read.csv("~/lily.csv") > DF$product1_1 <- NA > DF$product1_1 <- DF[DF$month == 1, "product1"]*3.1 Error in `$<-.data.frame`(`*tmp*`, "product1_1", value = c(55.8, 58.9, : replacement has 4 rows, data has 7 > DF$product1_1 <- DF[which(DF$month == 1), "product1"]*3.1 Error in `$<-.data.frame`(`*tmp*`, "product1_1", value = c(55.8, 58.9, : replacement has 4 rows, data has 7 > DF[DF$month == 1, "product1_1"] <- DF[DF$month == 1, "product1"]*3.1 > DF year month day product1 product2 product3 product1_1 1 1981 1 1 18 56 20 55.8 2 1981 1 2 19 45 22 58.9 3 1981 1 3 16 48 28 49.6 4 1981 1 4 19 50 21 58.9 5 1981 2 1 17 49 25 NA 6 1981 2 2 20 47 23 NA 7 1981 2 3 21 52 27 NA > The two errors above were caused because I failed to specify rows on the left hand side of the assignment operator, not because I failed to use which(). Once rows and columns are specified on both sides, the assignment works fine. (I do however, prefer to create an "NA" column first. Personal preference ;-). Best Regards, Bill. On Mon, May 22, 2017 at 11:57 PM, Ivan Calandrawrote: > Hi, > > Actually, you don't need to create the column first, nor to use which: > DF[DF$month==1, "product1_1"] = DF[DF$month==1, "product1"] * 3.1 > > The "[" is a great tool that you need to learn. In this case, you don't need > to combine "[" and $: within the square brackets, the vector before the > comma indexes the rows and the one after the comma indexes the columns. > > The other thing you were missing correctly referencing the rows. You have to > specify the data.frame you want to look into. > > And last, learn to use dput() to provide a nice reproducible example. > > HTH, > Ivan > > > -- > Dr. Ivan Calandra > TraCEr, Laboratory for Traceology and Controlled Experiments > MONREPOS Archaeological Research Centre and > Museum for Human Behavioural Evolution > Schloss Monrepos > 56567 Neuwied, Germany > +49 (0) 2631 9772-243 > https://www.researchgate.net/profile/Ivan_Calandra > > On 23/05/2017 08:45, William Michels via R-help wrote: >> >> Hi Lily, >> >> You're on the right track, but you should define a new column first >> (filled with NA values), then specify the precise rows and columns on >> both the left and right hand sides of the assignment operator that >> will be altered. Luckily, this is pretty easy...just remember to use >> which() on the right hand side of the assignment operator to get the >> index of the rows you want. Example below for "product1": >> >>> DF$product1_1 <- NA >>> DF[DF$month == 1, "product1_1"] <- DF[which(DF$month == 1), >>> "product1"]*3.1 >>> >> >> HTH, >> >> Bill. >> >> William Michels, Ph.D. >> >> >> >> >> On Mon, May 22, 2017 at 9:56 PM, lily li wrote: >>> >>> Hi R users, >>> >>> I have a question about manipulating the dataframe. I want to create a >>> new >>> dataframe, and to multiply rows with different seasons for different >>> constants. >>> >>> DF >>> year month day product1 product2 product3 >>> 1981 1 1 18 5620 >>> 1981 1 2 19 4522 >>> 1981 1 3 16 4828 >>> 1981 1 4 19 5021 >>> 1981 2 1 17 4925 >>> 1981 2 2 20 4723 >>> 1981 2 3 21 5227 >>> >>> For example, how to multiply product1 in month1 by 3.1, and to multiply >>> product3 in month2 by 2.0? I wrote the code like this but does not work. >>> Thanks for your help. >>> >>> DF['month'==1, ]$product1_1 = DF['month'==1, ]$product1 * 3.1; >>> DF['month'==2, ]$product3_1 = DF['month'==1, ]$product3 * 2.0; >>> >>> [[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. >> >> __ >> 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. >> > > __ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >
Re: [R] About change columns and specific rows in R
Hi, Actually, you don't need to create the column first, nor to use which: DF[DF$month==1, "product1_1"] = DF[DF$month==1, "product1"] * 3.1 The "[" is a great tool that you need to learn. In this case, you don't need to combine "[" and $: within the square brackets, the vector before the comma indexes the rows and the one after the comma indexes the columns. The other thing you were missing correctly referencing the rows. You have to specify the data.frame you want to look into. And last, learn to use dput() to provide a nice reproducible example. HTH, Ivan -- Dr. Ivan Calandra TraCEr, Laboratory for Traceology and Controlled Experiments MONREPOS Archaeological Research Centre and Museum for Human Behavioural Evolution Schloss Monrepos 56567 Neuwied, Germany +49 (0) 2631 9772-243 https://www.researchgate.net/profile/Ivan_Calandra On 23/05/2017 08:45, William Michels via R-help wrote: Hi Lily, You're on the right track, but you should define a new column first (filled with NA values), then specify the precise rows and columns on both the left and right hand sides of the assignment operator that will be altered. Luckily, this is pretty easy...just remember to use which() on the right hand side of the assignment operator to get the index of the rows you want. Example below for "product1": DF$product1_1 <- NA DF[DF$month == 1, "product1_1"] <- DF[which(DF$month == 1), "product1"]*3.1 HTH, Bill. William Michels, Ph.D. On Mon, May 22, 2017 at 9:56 PM, lily liwrote: Hi R users, I have a question about manipulating the dataframe. I want to create a new dataframe, and to multiply rows with different seasons for different constants. DF year month day product1 product2 product3 1981 1 1 18 5620 1981 1 2 19 4522 1981 1 3 16 4828 1981 1 4 19 5021 1981 2 1 17 4925 1981 2 2 20 4723 1981 2 3 21 5227 For example, how to multiply product1 in month1 by 3.1, and to multiply product3 in month2 by 2.0? I wrote the code like this but does not work. Thanks for your help. DF['month'==1, ]$product1_1 = DF['month'==1, ]$product1 * 3.1; DF['month'==2, ]$product3_1 = DF['month'==1, ]$product3 * 2.0; [[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. __ 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. __ 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.
Re: [R] About change columns and specific rows in R
Hi Lily, You're on the right track, but you should define a new column first (filled with NA values), then specify the precise rows and columns on both the left and right hand sides of the assignment operator that will be altered. Luckily, this is pretty easy...just remember to use which() on the right hand side of the assignment operator to get the index of the rows you want. Example below for "product1": > DF$product1_1 <- NA > DF[DF$month == 1, "product1_1"] <- DF[which(DF$month == 1), "product1"]*3.1 > HTH, Bill. William Michels, Ph.D. On Mon, May 22, 2017 at 9:56 PM, lily liwrote: > Hi R users, > > I have a question about manipulating the dataframe. I want to create a new > dataframe, and to multiply rows with different seasons for different > constants. > > DF > year month day product1 product2 product3 > 1981 1 1 18 5620 > 1981 1 2 19 4522 > 1981 1 3 16 4828 > 1981 1 4 19 5021 > 1981 2 1 17 4925 > 1981 2 2 20 4723 > 1981 2 3 21 5227 > > For example, how to multiply product1 in month1 by 3.1, and to multiply > product3 in month2 by 2.0? I wrote the code like this but does not work. > Thanks for your help. > > DF['month'==1, ]$product1_1 = DF['month'==1, ]$product1 * 3.1; > DF['month'==2, ]$product3_1 = DF['month'==1, ]$product3 * 2.0; > > [[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. __ 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.
[R] About change columns and specific rows in R
Hi R users, I have a question about manipulating the dataframe. I want to create a new dataframe, and to multiply rows with different seasons for different constants. DF year month day product1 product2 product3 1981 1 1 18 5620 1981 1 2 19 4522 1981 1 3 16 4828 1981 1 4 19 5021 1981 2 1 17 4925 1981 2 2 20 4723 1981 2 3 21 5227 For example, how to multiply product1 in month1 by 3.1, and to multiply product3 in month2 by 2.0? I wrote the code like this but does not work. Thanks for your help. DF['month'==1, ]$product1_1 = DF['month'==1, ]$product1 * 3.1; DF['month'==2, ]$product3_1 = DF['month'==1, ]$product3 * 2.0; [[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.