2012-04-28 72 views
2

一個data.frame的列的是「人品」
例如:下午9時56分53秒2012年3月31日如何將數據幀的字符列轉換爲Posixlt型

/> class(columnName) 
[1] "character" 

/>ttable[,c(3)] <- as.POSIXlt(ttable[,c(3)],tz="GMT", format="%H:%M:%S %p %m/%d/%Y")  

/>class(columnName)  
[1] "numeric"  

我期望它是posixlt,但它變成了數字。如何使它posixlt?

如果我對列的實際值應用相同的指令,它按預期工作?

/> dd <- as.POSIXlt("9:56:53 PM 3/31/2012",tz="GMT", format="%H:%M:%S %p %m/%d/%Y") 

/> class(dd) 
[1] "POSIXlt" "POSIXt" 
+0

你在做'columnName < - ttable [,3]; ttable [,3] < - as.POSIXlt(...);類(列名)'?在這種情況下,請注意,當'ttable [,3]''時,'columnName'不會改變,因爲R不能像那樣工作。你可以直接轉換'columnName',或者在*轉換'ttable [,3]'之後*然後做'columnName' < - 'ttable [,3]'並重新測試它的類。 (另外,'ttable'是數據框還是矩陣/數組?) – 2012-04-29 00:06:01

+0

@ mathematical.coffee ColumnName只是表示列的名稱。沒有對列名執行操作。感謝您的編輯。 – 2sb 2012-04-30 15:14:47

回答

3

首先,讓我們創建一些數據並複製您的問題。需要注意的警告,你沒有提到:

ttable <- data.frame(x=1:2, y=1:2, z="9:56:53 PM 3/31/2012", 
        stringsAsFactors = FALSE) 
ttable 
# x y     z 
# 1 1 1 9:56:53 PM 3/31/2012 
# 2 2 2 9:56:53 PM 3/31/2012 
ttable[, c(3)] <- as.POSIXlt(ttable[,c(3)], tz="GMT", 
              format="%H:%M:%S %p %m/%d/%Y") 
# Warning message: 
# In `[<-.data.frame`(`*tmp*`, , c(3), value = list(sec = c(53, 53 : 
# provided 9 variables to replace 1 variables 
sapply(ttable, class) 
#   x   y   z 
# "integer" "integer" "numeric" 

由於@joran指出我們?DateTimeClasses,問題是,as.POSIXlt返回長度爲九(秒,分鐘,小時等)的載體列表。此列表可以不到位的ttable[,c(3)]被分配,因爲它的當前的「寬度」是1。相反,整個data.frame列(或列表元素)必須被重新分配,經由ttable[[3]]ttable$z

ttable <- data.frame(x=1:2, y=1:2, z="9:56:53 PM 3/31/2012", 
        stringsAsFactors = FALSE) 
ttable[[3]] <- as.POSIXlt(ttable[,c(3)], tz="GMT", 
             format="%H:%M:%S %p %m/%d/%Y") 
sapply(ttable, class) 
# $x 
# [1] "integer" 
# 
# $y 
# [1] "integer" 
# 
# $z 
# [1] "POSIXlt" "POSIXt" 

分配列表作爲一個data.frame的列是不是一個很常見的事情。這個類似的例子可能有所幫助:

ttable[, 1] <- list(a = 1:3, b = 3:1) 
# Warning messages: [...] 
ttable$x <- list(a = 1:3, b = 3:1) 
#   x y     z 
# 1 1, 2, 3 1 2012-03-31 09:56:53 
# 2 3, 2, 1 2 2012-03-31 09:56:53 
+0

掃描'?DateTimeClasses'獲取部分解釋。 – joran 2012-04-29 00:25:29

+0

Thx @joran,我現在明白了,我會盡快編輯。 – flodel 2012-04-29 00:40:00

相關問題