Dear all, Hope you are doing great. I have a .csv file that I read into R, the .csv file consistss of two fields (TransitDate and CargoTons). The TransitDate I formatted from Excel in the fashion mmm-yy (e.g.: Apr-2013). However R does not recognize the field TransitDate as a date field. Here is the code: library(lubridate) Dataset <- read.table("U:/NEWCargoData.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) DatasetFrame <- data.frame(Dataset) DatasetFrame$TransitDate <- as.Date(DatasetFrame$TransitDate, format "%b-%y") Now, when I do DatasetFrame[1,1], the following happens:> DatasetFrame[1,1][1] NA> > DatasetFrame[2,1][1] NA>Now when I do:> Dataset[1,1] #this is the dataset as was read from my computer[1] Jun-11 62 Levels: Apr-13 Apr-14 Apr-15 Apr-16 Apr-17 Aug-13 Aug-14 Aug-15 Aug-16 Dec-12 Dec-13 Dec-14 ... Sep-16>I am also attaching the .csv file for your reference. How can I do to get R to convert TransitDate into an actual date field? R is not recognizing it as a date. Any help will be greatly appreciated, Best regards, Paul
Christopher W Ryan
2017-Jun-19 19:30 UTC
[R] How to Transform a Factor Variable into a Date
A couple thoughts: 1. converting factors into dates often requires that they be converted to character first. 2. you don't really have dates; you have just months and years 3. therefore perhaps the as.yearmon() function in the zoo package could help library(zoo) my.factor <- factor("Feb 2017") as.yearmon(my.factor) ## gets around the factor-vs-character issue On Mon, Jun 19, 2017 at 3:07 PM, Paul Bernal <paulbernal07 at gmail.com> wrote:> Dear all, > > Hope you are doing great. I have a .csv file that I read into R, the .csv > file consistss of two fields (TransitDate and CargoTons). > > The TransitDate I formatted from Excel in the fashion mmm-yy (e.g.: > Apr-2013). However R does not recognize the field TransitDate as a date > field. > > Here is the code: > > library(lubridate) > > Dataset <- read.table("U:/NEWCargoData.csv", header=TRUE, sep=",", > na.strings="NA", dec=".", strip.white=TRUE) > > DatasetFrame <- data.frame(Dataset) > > DatasetFrame$TransitDate <- as.Date(DatasetFrame$TransitDate, format > "%b-%y") > > > Now, when I do DatasetFrame[1,1], the following happens: > > > > DatasetFrame[1,1] > [1] NA > > > > DatasetFrame[2,1] > [1] NA > > > > Now when I do: > > > Dataset[1,1] #this is the dataset as was read from my computer > [1] Jun-11 > 62 Levels: Apr-13 Apr-14 Apr-15 Apr-16 Apr-17 Aug-13 Aug-14 Aug-15 Aug-16 > Dec-12 Dec-13 Dec-14 ... Sep-16 > > > > I am also attaching the .csv file for your reference. How can I do to get R > to convert TransitDate into an actual date field? R is not recognizing it > as a date. > > Any help will be greatly appreciated, > > Best regards, > > Paul > ______________________________________________ > 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. >[[alternative HTML version deleted]]
Hello, Another way of getting dates, of class 'Date', is to paste a day "01" into what the op has. To the op: 1) Your attachment didn't come through, R-Help doesn't accept the extension .csv, use .txt 2) When you read your data in using function read.csv the result already is a data.frame so the instruction DatasetFrame <- data.frame(Dataset) is not needed. 3) You can read the data and create a data.frame without the problem of getting factors instead of characters, just set option stringsAsFactors = FALSE in your calls to read.* And now some code. Note that I've made up some data, since we don't have the .csv file. x <- "Jun-11" Dataset <- data.frame(x) str(Dataset) tmp <- paste("01", as.character(Dataset$x), sep = "-") Dataset$x <- as.Date(tmp, format = "%d-%b-%y") str(Dataset) Hope this helps, Rui Barradas Em 19-06-2017 20:30, Christopher W Ryan escreveu:> A couple thoughts: > > 1. converting factors into dates often requires that they be converted to > character first. > > 2. you don't really have dates; you have just months and years > > 3. therefore perhaps the as.yearmon() function in the zoo package could help > > library(zoo) > my.factor <- factor("Feb 2017") > as.yearmon(my.factor) ## gets around the factor-vs-character issue > > > On Mon, Jun 19, 2017 at 3:07 PM, Paul Bernal <paulbernal07 at gmail.com> wrote: > >> Dear all, >> >> Hope you are doing great. I have a .csv file that I read into R, the .csv >> file consistss of two fields (TransitDate and CargoTons). >> >> The TransitDate I formatted from Excel in the fashion mmm-yy (e.g.: >> Apr-2013). However R does not recognize the field TransitDate as a date >> field. >> >> Here is the code: >> >> library(lubridate) >> >> Dataset <- read.table("U:/NEWCargoData.csv", header=TRUE, sep=",", >> na.strings="NA", dec=".", strip.white=TRUE) >> >> DatasetFrame <- data.frame(Dataset) >> >> DatasetFrame$TransitDate <- as.Date(DatasetFrame$TransitDate, format >> "%b-%y") >> >> >> Now, when I do DatasetFrame[1,1], the following happens: >> >> >>> DatasetFrame[1,1] >> [1] NA >>> >>> DatasetFrame[2,1] >> [1] NA >>> >> >> Now when I do: >> >>> Dataset[1,1] #this is the dataset as was read from my computer >> [1] Jun-11 >> 62 Levels: Apr-13 Apr-14 Apr-15 Apr-16 Apr-17 Aug-13 Aug-14 Aug-15 Aug-16 >> Dec-12 Dec-13 Dec-14 ... Sep-16 >>> >> >> I am also attaching the .csv file for your reference. How can I do to get R >> to convert TransitDate into an actual date field? R is not recognizing it >> as a date. >> >> Any help will be greatly appreciated, >> >> Best regards, >> >> Paul >> ______________________________________________ >> 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. >> > > [[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. >
The R list does not recognize .csv files so your attachment got stripped. It is picky that way. Tacking .txt to the end might trick it into preserving the attachment. Dataset <- read.table() created a data.frame called Dataset so the second command was redundant. Probably better would be read.csv() which automatically uses "," as the separator. Also including the argument as.is=TRUE will prevent conversion of character fields to factors. Then your conversion to dates should work once you add a day to the month-year format (e.g. first of the month or middle of the month):> Test <- read.csv(text='"TransitDate", "CargoTons"+ "Apr-2013", 50 + "Jun-2013", 40 + "Jul-2013", 30', as.is=TRUE)> Test$TransitDate <- as.Date(paste0("01-", Test$TransitDate), "%d-%b-%Y") > str(Test)'data.frame': 3 obs. of 2 variables: $ TransitDate: Date, format: "2013-04-01" "2013-06-01" ... $ CargoTons : int 50 40 30> TestTransitDate CargoTons 1 2013-04-01 50 2 2013-06-01 40 3 2013-07-01 30 ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Paul Bernal Sent: Monday, June 19, 2017 2:07 PM To: r-help at r-project.org Subject: [R] How to Transform a Factor Variable into a Date Dear all, Hope you are doing great. I have a .csv file that I read into R, the .csv file consistss of two fields (TransitDate and CargoTons). The TransitDate I formatted from Excel in the fashion mmm-yy (e.g.: Apr-2013). However R does not recognize the field TransitDate as a date field. Here is the code: library(lubridate) Dataset <- read.table("U:/NEWCargoData.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) DatasetFrame <- data.frame(Dataset) DatasetFrame$TransitDate <- as.Date(DatasetFrame$TransitDate, format "%b-%y") Now, when I do DatasetFrame[1,1], the following happens:> DatasetFrame[1,1][1] NA> > DatasetFrame[2,1][1] NA>Now when I do:> Dataset[1,1] #this is the dataset as was read from my computer[1] Jun-11 62 Levels: Apr-13 Apr-14 Apr-15 Apr-16 Apr-17 Aug-13 Aug-14 Aug-15 Aug-16 Dec-12 Dec-13 Dec-14 ... Sep-16>I am also attaching the .csv file for your reference. How can I do to get R to convert TransitDate into an actual date field? R is not recognizing it as a date. Any help will be greatly appreciated, Best regards, Paul ______________________________________________ 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.