Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 1 0 2 1 3 1 4 1 arenn001 5 2 arenn001 6 0 7 0 perad001 8 0 polla001 perad001 9 0 goldp001 polla001 perad001 10 0 lambj001 goldp001 11 1 lambj001 goldp001 12 2 lambj001 13 0 14 1 With the above data, Arizona Diamondbacks baseball, I?m trying to put zeros into the R1 column is the RunnerFirst column is blank and a one if the column has a coded entry such as rows 4,5,7,8,& 9. Similarly I want zeros in R2 and R3 if RunnerSecond and RunnerThird respectively are blank and ones if there is an entry. I?ve tried everything I know how to do such as ?If Loops?, ?If-Then loops?, ?apply?, ?sapply?, etc. I wrote function below and it ran without errors but I have no idea what to do with it to accomplish my goal: R1 <- function(x) { if (ari18.test3$RunnerFirst == " "){ ari18.test3$R1 <- 0 return(R1) }else{ R1 <- ari18.test3$R1 <- 1 return(R1) } } The name of the data frame is ari18.test3 On a more philosophical note, data handling in R seems to be made up of thousands of details with no over-riding principles. I?ve read two books on R and a number of tutorial and watched several videos but I don?t seem to be making any progress. Can anyone suggest videos, or tutorials, or books that might help? Database stuff has never been my strong point but I?m determined to learn. Thanks, Philip Heinrich [[alternative HTML version deleted]]
Hi Philip, Try this: phdf<-read.table( text="Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 1 0 2 1 3 1 4 1 arenn001 5 2 arenn001 6 0 7 0 perad001 8 0 polla001 perad001 9 0 goldp001 polla001 perad001 10 0 lambj001 goldp001 11 1 lambj001 goldp001 12 2 lambj001 13 0 14 1 ", header=TRUE,stringsAsFactors=FALSE,fill=TRUE) phdf$R1<-ifelse(nchar(phdf$RunnerFirst) > 0,1,0) phdf$R2<-ifelse(nchar(phdf$RunnerSecond) > 0,1,0) phdf$R3<-ifelse(nchar(phdf$RunnerThird) > 0,1,0) Jim On Wed, Oct 23, 2019 at 7:54 AM Phillip Heinrich <herd_dog at cox.net> wrote:> > Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > 1 0 > 2 1 > 3 1 > 4 1 arenn001 > 5 2 arenn001 > 6 0 > 7 0 perad001 > 8 0 polla001 perad001 > 9 0 goldp001 polla001 perad001 > 10 0 lambj001 goldp001 > 11 1 lambj001 goldp001 > 12 2 lambj001 > 13 0 > 14 1 > > > > With the above data, Arizona Diamondbacks baseball, I?m trying to put zeros into the R1 column is the RunnerFirst column is blank and a one if the column has a coded entry such as rows 4,5,7,8,& 9. Similarly I want zeros in R2 and R3 if RunnerSecond and RunnerThird respectively are blank and ones if there is an entry. > > I?ve tried everything I know how to do such as ?If Loops?, ?If-Then loops?, ?apply?, ?sapply?, etc. I wrote function below and it ran without errors but I have no idea what to do with it to accomplish my goal: > > R1 <- function(x) { > if (ari18.test3$RunnerFirst == " "){ > ari18.test3$R1 <- 0 > return(R1) > }else{ > R1 <- ari18.test3$R1 <- 1 > return(R1) > } > } > > The name of the data frame is ari18.test3 > > On a more philosophical note, data handling in R seems to be made up of thousands of details with no over-riding principles. I?ve read two books on R and a number of tutorial and watched several videos but I don?t seem to be making any progress. Can anyone suggest videos, or tutorials, or books that might help? Database stuff has never been my strong point but I?m determined to learn. > > Thanks, > Philip Heinrich > [[alternative HTML version deleted]] > > ______________________________________________ > 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.
On 10/22/19 1:54 PM, Phillip Heinrich wrote:> Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > 1 0 > 2 1 > 3 1 > 4 1 arenn001 > 5 2 arenn001 > 6 0 > 7 0 perad001 > 8 0 polla001 perad001 > 9 0 goldp001 polla001 perad001 > 10 0 lambj001 goldp001 > 11 1 lambj001 goldp001 > 12 2 lambj001 > 13 0 > 14 1 > > > > With the above data, Arizona Diamondbacks baseball, I?m trying to put zeros into the R1 column is the RunnerFirst column is blank and a one if the column has a coded entry such as rows 4,5,7,8,& 9. Similarly I want zeros in R2 and R3 if RunnerSecond and RunnerThird respectively are blank and ones if there is an entry. > > I?ve tried everything I know how to do such as ?If Loops?, ?If-Then loops?, ?apply?, ?sapply?, etc. I wrote function below and it ran without errors but I have no idea what to do with it to accomplish my goal: > > R1 <- function(x) { > if (ari18.test3$RunnerFirst == " "){ > ari18.test3$R1 <- 0 > return(R1) > }else{ > R1 <- ari18.test3$R1 <- 1 > return(R1) > } > } > > The name of the data frame is ari18.test3 > > On a more philosophical note, data handling in R seems to be made up of thousands of details with no over-riding principles. I?ve read two books on R and a number of tutorial and watched several videos but I don?t seem to be making any progress. Can anyone suggest videos, or tutorials, or books that might help? Database stuff has never been my strong point but I?m determined to learn. > > Thanks, > Philip Heinrich > [[alternative HTML version deleted]]I'm not sure how well you read instructions since you submitted this in HTML. The advice I would give for learning data handling is to study R's data structures and the help pages for `[<-`, `lapply`,`merge`, and the concept of vectorization. If you don't know Boolean logic well, then studying that topic would also be helpful. Studying the help page for `[<-` is a stepo may newbies think they can avoid, but mastery will elude you until you have read through it probably ten or tweny times. Here's how to input that data and create R1. The methods to create R2,and R3 would take two more similar lines of code. > dat <- read.table(text="????? Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 +?????? 1 0 +?????? 2 1 +?????? 3 1 +?????? 4 1 arenn001 +?????? 5 2 arenn001 +?????? 6 0 +?????? 7 0 perad001 +?????? 8 0 polla001 perad001 +?????? 9 0 goldp001 polla001 perad001 +?????? 10 0? lambj001 goldp001 +?????? 11 1? lambj001 goldp001 +?????? 12 2?? lambj001 +?????? 13 0 +?????? 14 1?????? ", header=TRUE, fill=TRUE) > dat ?? Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 1??? 1??? 0????????????????????????????????????? NA NA NA 2??? 2??? 1????????????????????????????????????? NA NA NA 3??? 3??? 1????????????????????????????????????? NA NA NA 4??? 4??? 1??? arenn001????????????????????????? NA NA NA 5??? 5??? 2??? arenn001????????????????????????? NA NA NA 6??? 6??? 0????????????????????????????????????? NA NA NA 7??? 7??? 0??? perad001????????????????????????? NA NA NA 8??? 8??? 0??? polla001???? perad001???????????? NA NA NA 9??? 9??? 0??? goldp001???? polla001??? perad001 NA NA NA 10? 10??? 0??? lambj001???? goldp001???????????? NA NA NA 11? 11??? 1??? lambj001???? goldp001???????????? NA NA NA 12? 12??? 2??? lambj001????????????????????????? NA NA NA 13? 13??? 0????????????????????????????????????? NA NA NA 14? 14??? 1????????????????????????????????????? NA NA NA > levels(dat$RunnerFirst) [1] ""???????? "arenn001" "goldp001" "lambj001" "perad001" "polla001" > dat$R1 <- as.numeric( dat$RunnerFirst != "") > dat$R1 ?[1] 0 0 0 1 1 0 1 1 1 1 1 1 0 0 -- David.> > ______________________________________________ > 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.
Notice that I used the argument stringsAsFactors=FALSE to do this when reading in. What I did was to change Rn columns to 1 if there were any characters in the corresponding Runnerxxx column and 0 otherwise. The "nchar" function returns the number of characters in a string. If I apply ">0" to it, I get TRUE(1) if nchar returns a number larger than zero and FALSE (0) otherwise. By using the result of this operation as the first argument in the call to "ifelse", I can set the values of the Rn columns one by one. It is possible to do all three in one call with an appropriate function: whos_on_first<-function(x) return(as.numeric(nchar(x) > 0)) phdf[,6:8]<-sapply(phdf[,3:5],whos_on_first) Jiim On Wed, Oct 23, 2019 at 11:20 AM Phillip Heinrich <herd_dog at cox.net> wrote:> > The routine you suggested worked once I changed RunnerFirst, Second, & Third > to character vectors. > > But I really don't understand what the code is doing. I understand the > Ifelse(no-character in RunnerFirst vector) but the 0,1,0 is a mystery. I > assume the first zero is if the field is blank and a one if there is > something in the field. But what does the third number do? And why is a > > symbol used as opposed to an = sign? > > Again the bigger question is how do I learn this stuff? I bought another > book, "R Projects for Dummies". I will work through the examples over the > next week and hope I'll know more once I'm done. > > Can you suggest any other sources? > > Thanks. > > -----Original Message----- > From: Jim Lemon > Sent: Tuesday, October 22, 2019 3:26 PM > To: Phillip Heinrich > Cc: r-help > Subject: Re: [R] If Loop I Think > > Hi Philip, > Try this: > > phdf<-read.table( > text="Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > 1 0 > 2 1 > 3 1 > 4 1 arenn001 > 5 2 arenn001 > 6 0 > 7 0 perad001 > 8 0 polla001 perad001 > 9 0 goldp001 polla001 perad001 > 10 0 lambj001 goldp001 > 11 1 lambj001 goldp001 > 12 2 lambj001 > 13 0 > 14 1 ", > header=TRUE,stringsAsFactors=FALSE,fill=TRUE) > phdf$R1<-ifelse(nchar(phdf$RunnerFirst) > 0,1,0) > phdf$R2<-ifelse(nchar(phdf$RunnerSecond) > 0,1,0) > phdf$R3<-ifelse(nchar(phdf$RunnerThird) > 0,1,0) > > Jim > > On Wed, Oct 23, 2019 at 7:54 AM Phillip Heinrich <herd_dog at cox.net> wrote: > > > > Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > > 1 0 > > 2 1 > > 3 1 > > 4 1 arenn001 > > 5 2 arenn001 > > 6 0 > > 7 0 perad001 > > 8 0 polla001 perad001 > > 9 0 goldp001 polla001 perad001 > > 10 0 lambj001 goldp001 > > 11 1 lambj001 goldp001 > > 12 2 lambj001 > > 13 0 > > 14 1 > > > > > > > > With the above data, Arizona Diamondbacks baseball, I?m trying to put > > zeros into the R1 column is the RunnerFirst column is blank and a one if > > the column has a coded entry such as rows 4,5,7,8,& 9. Similarly I want > > zeros in R2 and R3 if RunnerSecond and RunnerThird respectively are blank > > and ones if there is an entry. > > > > I?ve tried everything I know how to do such as ?If Loops?, ?If-Then loops?, > > ?apply?, ?sapply?, etc. I wrote function below and it ran without errors > > but I have no idea what to do with it to accomplish my goal: > > > > R1 <- function(x) { > > if (ari18.test3$RunnerFirst == " "){ > > ari18.test3$R1 <- 0 > > return(R1) > > }else{ > > R1 <- ari18.test3$R1 <- 1 > > return(R1) > > } > > } > > > > The name of the data frame is ari18.test3 > > > > On a more philosophical note, data handling in R seems to be made up of > > thousands of details with no over-riding principles. I?ve read two books > > on R and a number of tutorial and watched several videos but I don?t seem > > to be making any progress. Can anyone suggest videos, or tutorials, or > > books that might help? Database stuff has never been my strong point but > > I?m determined to learn. > > > > Thanks, > > Philip Heinrich > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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. >
Hi ***do not think in if or if loops in R***. to elaborate Jim's solution further With simple function based on logical expression fff <- function(x) (x!="")+0 you could use apply t(apply(phdf[,3:5], 1, fff)) and add results to your data frame columns phdf[, 6:8] <- t(apply(phdf[,3:5], 1, fff)) Regarding some tutorial Basic stuff is in R-intro, there is excellent documentation to each function. And as R users pool is huge, you could simply ask Google e.g. r change values based on condition Cheers Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Jim Lemon > Sent: Wednesday, October 23, 2019 12:26 AM > To: Phillip Heinrich <herd_dog at cox.net> > Cc: r-help <R-help at r-project.org> > Subject: Re: [R] If Loop I Think > > Hi Philip, > Try this: > > phdf<-read.table( > text="Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > 1 0 > 2 1 > 3 1 > 4 1 arenn001 > 5 2 arenn001 > 6 0 > 7 0 perad001 > 8 0 polla001 perad001 > 9 0 goldp001 polla001 perad001 > 10 0 lambj001 goldp001 > 11 1 lambj001 goldp001 > 12 2 lambj001 > 13 0 > 14 1 ", > header=TRUE,stringsAsFactors=FALSE,fill=TRUE) > phdf$R1<-ifelse(nchar(phdf$RunnerFirst) > 0,1,0) > phdf$R2<-ifelse(nchar(phdf$RunnerSecond) > 0,1,0) > phdf$R3<-ifelse(nchar(phdf$RunnerThird) > 0,1,0) > > Jim > > On Wed, Oct 23, 2019 at 7:54 AM Phillip Heinrich <herd_dog at cox.net> > wrote: > > > > Row Outs RunnerFirst RunnerSecond RunnerThird R1 R2 R3 > > 1 0 > > 2 1 > > 3 1 > > 4 1 arenn001 > > 5 2 arenn001 > > 6 0 > > 7 0 perad001 > > 8 0 polla001 perad001 > > 9 0 goldp001 polla001 perad001 > > 10 0 lambj001 goldp001 > > 11 1 lambj001 goldp001 > > 12 2 lambj001 > > 13 0 > > 14 1 > > > > > > > > With the above data, Arizona Diamondbacks baseball, I?m trying to put > zeros into the R1 column is the RunnerFirst column is blank and a one if the > column has a coded entry such as rows 4,5,7,8,& 9. Similarly I want zeros in > R2 and R3 if RunnerSecond and RunnerThird respectively are blank and ones > if there is an entry. > > > > I?ve tried everything I know how to do such as ?If Loops?, ?If-Then loops?, > ?apply?, ?sapply?, etc. I wrote function below and it ran without errors but I > have no idea what to do with it to accomplish my goal: > > > > R1 <- function(x) { > > if (ari18.test3$RunnerFirst == " "){ > > ari18.test3$R1 <- 0 > > return(R1) > > }else{ > > R1 <- ari18.test3$R1 <- 1 > > return(R1) > > } > > } > > > > The name of the data frame is ari18.test3 > > > > On a more philosophical note, data handling in R seems to be made up of > thousands of details with no over-riding principles. I?ve read two books on R > and a number of tutorial and watched several videos but I don?t seem to be > making any progress. Can anyone suggest videos, or tutorials, or books that > might help? Database stuff has never been my strong point but I?m > determined to learn. > > > > Thanks, > > Philip Heinrich > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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. > > ______________________________________________ > 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.