[R] Can't understand syntax

Rui Barradas ruipbarradas at sapo.pt
Sun Jul 15 18:33:41 CEST 2012


Hello, again.

Inline.

Em 15-07-2012 16:17, Charles Stangor escreveu:
> Rui,
>
> Since you are so generous, may I ask you one more question?  What is the
> deal with the text after the semicolon in the statement below? Is this
> an ifelse or something?  Why is it needed ?
>
> obrigado.
>
> df1 <- read.table(text="
> cola colb colc cold cole
> 1    NA    5    9   NA   17
> 2    2    6   NA   14   NA
> 3    3    NA   11   15   19
> 4    4    8   12   NA   NA
> ", header=TRUE)
>
> df2 <- read.table(text="
> cola colb colc cold cole
> 1  8 10 12 14 16
> ", header=TRUE)
>
> df1[["cola"]][is.na(df1[["cola"]])] <- df2[["cola"]];
> df1[["cola"]]  #?? what's happening after the semi?

It's printing df1[["cola"]]. Just that. The sem-colon ends an 
instruction and starts a new one.
If it's confusing, put what follows it in a new line.

Rui Barradas
>
> df1
>
>
>
> On Sat, Jul 14, 2012 at 7:41 PM, Rui Barradas <ruipbarradas at sapo.pt
> <mailto:ruipbarradas at sapo.pt>> wrote:
>
>     Hello,
>
>     It's more simple than you believe it is. One thing at a time.
>
>     First, in order to lighten the instructions, create index vectors.
>
>     test2 <- test  # save 'test' for later
>
>     na.v1 <- is.na <http://is.na>(test[["v1"]])
>     na.v2 <- is.na <http://is.na>(test[["v2"]])
>     na.v3 <- is.na <http://is.na>(test[["v3"]])
>
>
>     Now use them.
>
>
>     test[[ "result" ]][ !na.v1 ] <- test[[ "v1" ]][ !na.v1 ]
>     test[[ "result" ]][ !na.v2 ] <- test[[ "v2" ]][ !na.v2 ]
>     test[[ "result" ]][ !na.v3 ] <- test[[ "v3" ]][ !na.v3 ]
>
>
>     Note that above, for instance, n the first line, on each side of
>     '<-' we have two different types of indexing, in a certain sense.
>
>     One, a data.frame is a list of a special type, each list member is a
>     (random?) variable and all variables have the same number of
>     observations. So test[[ "result" ]] refers to a vector of the
>     data.frame.
>
>     Another is the indexing of that vectors' elements. Imagine that we
>     had assigned
>
>     test.res <- test[[ "result" ]]
>
>     and then accessed the elements of 'test.res' with
>
>     test.res[ !na.v1 ] <- ...etc...
>
>     That's what we are doing.
>     Considering that a df is a list with a tabular form, we could also
>     use the row/column type of indexing. Maybe this would be more
>     intuitive. Equivalent, exactly equivalent to the code above is:
>
>
>     test2[  !na.v1 , "result" ] <- test2[ !na.v1 , "v1" ]
>     test2[  !na.v2 , "result" ] <- test2[ !na.v2 , "v2" ]
>     test2[  !na.v3 , "result" ] <- test2[ !na.v3 , "v3" ]
>
>     all.equal(test, test2) # TRUE
>
>
>     Hope this helps,
>
>     Rui Barradas
>
>     Em 14-07-2012 21:22, Charles Stangor escreveu:
>
>         OK, I need help!!
>
>         I've been searching, but I don't understand the logic of some this
>         dataframe addressing syntax.
>
>         What is this type of code called?
>
>         test [["v3"]] [is.na <http://is.na>
>         <http://is.na>(test[["v2"]])] <-10  #choose column
>         v3 where column v2 is == 4 and replace with 10
>
>         and where is it documented?
>
>
>         The code below works for what I want to do (find the non-missing
>         value
>         in a row), but why?
>
>         test <- read.table(text="
>         v1  v2  v3  result
>         3  NA  NA  NA
>         NA  3   NA NA
>         NA  NA   3 NA
>         "
>         , header=TRUE)
>
>         test [["result"]] [!(is.na <http://is.na>
>         <http://is.na>(test[["v1"]]))] <- test
>         [["v1"]] [!(is.na <http://is.na> <http://is.na>(test[["v1"]]))]
>         test [["result"]] [!(is.na <http://is.na>
>         <http://is.na>(test[["v2"]]))] <- test
>         [["v2"]] [!(is.na <http://is.na> <http://is.na>(test[["v2"]]))]
>         test [["result"]] [!(is.na <http://is.na>
>         <http://is.na>(test[["v3"]]))] <- test
>         [["v3"]] [!(is.na <http://is.na> <http://is.na>(test[["v3"]]))]
>
>         thanks!
>
>
>         On Fri, Jul 13, 2012 at 6:41 AM, Rui Barradas
>         <ruipbarradas at sapo.pt <mailto:ruipbarradas at sapo.pt>
>         <mailto:ruipbarradas at sapo.pt <mailto:ruipbarradas at sapo.pt>>> wrote:
>
>              Hello,
>
>              Check the structure of what you have, df and newdf. You
>         will see
>              that in df dateTime is of class POSIXlt and in newDf
>         newDateTime is
>              of class POSIXct.
>
>              Solution:
>
>              [...]
>              df$dateTime <- strptime(df$dateTime,"%m/%d/%Y %H:%M")
>              df$dateTime <- as.POSIXct(df$dateTime)
>              [...]
>
>              Hope this helps,
>
>              Rui Barradas
>
>              Em 13-07-2012 10:24, vioravis escreveu:
>
>                  I have the following dataframe with the first column
>         being of
>                  type datetime:
>
>                  dateTime <- c("10/01/2005 0:00",
>                                  "10/01/2005 0:20",
>                                  "10/01/2005 0:40",
>                                  "10/01/2005 1:00",
>                                  "10/01/2005 1:20")
>                  var1 <- c(1,2,3,4,5)
>                  var2 <- c(10,20,30,40,50)
>                  df <- data.frame(dateTime = dateTime, var1 = var1, var2
>         = var2)
>                  df$dateTime <- strptime(df$dateTime,"%m/%d/%Y %H:%M")
>
>                  I want to create 10 minute interval data as follows:
>
>                  minTime <- min(df$dateTime)
>                  maxTime <- max(df$dateTime)
>                  newTime <- seq(minTime,maxTime,600)
>                  newDf <- data.frame(newDateTime = newTime)
>                  newDf <- merge(newDf,df,by.x = "newDateTime",by.y =
>                  "dateTime",all.x = TRUE)
>
>                  The objective here is to create a data frame with
>         values from df
>                  for the
>                  datetime in df and NA for the missing ones. However, I am
>                  getting the
>                  following data frame with both Var1 and Var2 having all
>         NAs.
>
>                      newDf
>
>                              newDateTime var1 var2
>                  1 2005-10-01 00:00:00   NA   NA
>                  2 2005-10-01 00:10:00   NA   NA
>                  3 2005-10-01 00:20:00   NA   NA
>                  4 2005-10-01 00:30:00   NA   NA
>                  5 2005-10-01 00:40:00   NA   NA
>                  6 2005-10-01 00:50:00   NA   NA
>                  7 2005-10-01 01:00:00   NA   NA
>                  8 2005-10-01 01:10:00   NA   NA
>                  9 2005-10-01 01:20:00   NA   NA
>
>                  Can someone help me on how to do the merge based on the
>         two datetime
>                  columns?
>
>                  Thank you.
>
>                  Ravi
>
>
>
>
>
>
>                  --
>                  View this message in context:
>         http://r.789695.n4.nabble.com/____Merging-on-Datetime-Column-____tp4636417.html
>         <http://r.789695.n4.nabble.com/__Merging-on-Datetime-Column-__tp4636417.html>
>
>         <http://r.789695.n4.nabble.__com/Merging-on-Datetime-__Column-tp4636417.html
>         <http://r.789695.n4.nabble.com/Merging-on-Datetime-Column-tp4636417.html>>
>                  Sent from the R help mailing list archive at Nabble.com.
>
>                  __________________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org>
>         <mailto:R-help at r-project.org <mailto:R-help at r-project.org>>
>         mailing list
>         https://stat.ethz.ch/mailman/____listinfo/r-help
>         <https://stat.ethz.ch/mailman/__listinfo/r-help>
>                  <https://stat.ethz.ch/mailman/__listinfo/r-help
>         <https://stat.ethz.ch/mailman/listinfo/r-help>>
>                  PLEASE do read the posting guide
>         http://www.R-project.org/____posting-guide.html
>         <http://www.R-project.org/__posting-guide.html>
>                  <http://www.R-project.org/__posting-guide.html
>         <http://www.R-project.org/posting-guide.html>>
>                  and provide commented, minimal, self-contained,
>         reproducible code.
>
>
>              __________________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org>
>         <mailto:R-help at r-project.org <mailto:R-help at r-project.org>>
>         mailing list
>         https://stat.ethz.ch/mailman/____listinfo/r-help
>         <https://stat.ethz.ch/mailman/__listinfo/r-help>
>              <https://stat.ethz.ch/mailman/__listinfo/r-help
>         <https://stat.ethz.ch/mailman/listinfo/r-help>>
>              PLEASE do read the posting guide
>         http://www.R-project.org/____posting-guide.html
>         <http://www.R-project.org/__posting-guide.html>
>              <http://www.R-project.org/__posting-guide.html
>         <http://www.R-project.org/posting-guide.html>>
>              and provide commented, minimal, self-contained,
>         reproducible code.
>
>
>
>
>         --
>         Charles Stangor
>         Professor and Associate Chair
>
>
>
>
>
>
> --
> Charles Stangor
> Professor and Associate Chair
>



More information about the R-help mailing list