Skip to content
Back to formatted view

Raw Message

Message-ID: <644e1f321001191123n6ec3e14duc3f254676e58d8ab@mail.gmail.com>
Date: 2010-01-19T19:23:13Z
From: jim holtman
Subject: Using the output of strsplit
In-Reply-To: <4B5602FA.1060002@gmail.com>

'x' is a matrix and not a dataframe.  You should be doing

colnames(x) <- c("Date", "quarter")
x[,"Date"] <- as.Date(x[,"Date"])


It would help if you took a look at the structure you were using to
understand how to access.  'names' applied to a vector would give you
the output for 13000 more entries.  Think about it.

On Tue, Jan 19, 2010 at 2:07 PM, James Rome <jamesrome at gmail.com> wrote:
> This suggestion does not work. x seems to have twice the number of
> entries as spl.
>> x <- do.call(rbind, spl)
>> names(x) <- c('Date', 'quarter')
>> x$Date <- as.Date(x$Date)
> Error in x$Date : $ operator is invalid for atomic vectors
>> x$quarter <- as.numeric(x$quarter)
> Error in x$quarter : $ operator is invalid for atomic vectors
>> names(x)
> ? ?[1] "Date" ? ?"quarter" NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA
> NA
> ? ?[8] NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA
> NA
> ? [15] NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA
> NA
> ? [22] NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA
> NA
> ? [29] NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA ? ? ? ?NA
> # and on for 13000 entries!
>
> Making it a data.frame dod not work either.
>
> I also tried
> qt=c(length(spl))
> dt=c(length(spl))
> ###
> for(j in 1:length(spl)) {
> ? dt[j]=spl[[j]][1]
> ? qt[j]=spl[[j]][2]
> ?}
>
> qt=as.numeric(qt)
> dt=as.POSIXlt(dt)
> rate=as.vector(ar)
> ratedata=data.frame(c(rate=rate,date=dt,quarter=qt))
> ###
> but then ratedata was totally wrong.
>
> Thanks,
> Jim
>
>
> On 1/18/10 4:59 PM, Dennis Murphy wrote:
>> Hi James:
>>
>> To slurp your list into a matrix, run
>>
>> x <- do.call(rbind, yourlistname)
>>
>> Date <- as.Date(x[, 1])
>> quarter <- as.numeric(x[, 2])
>>
>> You could also convert x to a data frame with as.data.frame(x) :
>>
>> x <- as.data.frame(x)
>> names(x) <- c('Date', 'quarter')
>> x$Date <- as.Date(x$Date)
>> x$quarter <- as.numeric(x$quarter)
>>
>> do.call() takes a function as its first argument and a list as its
>> second argument.
>>
>> HTH,
>> Dennis
>>
>> On Mon, Jan 18, 2010 at 1:48 PM, James Rome <jamesrome at gmail.com
>> <mailto:jamesrome at gmail.com>> wrote:
>>
>> ? ? I successfully combined my data frames, and am now on my next hurdle.
>>
>> ? ? I had combined the data and quarter, and used tapply to count the
>> ? ? entries for each unique date/quarter pair.
>> ? ? ar= tapply(ewrgnd$gw, list(ewrgnd$dq), sum) ? #for each date/quarter
>> ? ? combination sums the gw (which are all 1)
>> ? ? dq=row.names(ar)
>> ? ? spl=strsplit(dq)
>> ? ? But I need to split them back into the separate date and quarter. So I
>> ? ? used strsplit(), and get
>> ? ? > spl
>> ? ? [[1]]
>> ? ? [1] "2009-01-01" "60"
>>
>> ? ? [[2]]
>> ? ? [1] "2009-01-01" "61"
>>
>> ? ? [[3]]
>> ? ? [1] "2009-01-01" "62"
>>
>> ? ? [[4]]
>> ? ? [1] "2009-01-01" "63"
>>
>> ? ? [[5]]
>> ? ? [1] "2009-01-01" "68"
>> ? ? . . .
>>
>> ? ? But lists throw me. I want to get separate vectors of the date and
>> ? ? quarter out of my list. All the things I have seen extract rows
>> ? ? from the
>> ? ? list. I need to extract columns.
>>
>> ? ? Thanks list,
>> ? ? Jim Rome
>>
>> ? ? ______________________________________________
>> ? ? R-help at r-project.org <mailto:R-help at r-project.org> mailing list
>> ? ? 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
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?