我有一個巨大的數據框df
,在一列中的「年 - 月」值如下:「YYYYMM」。目前數據類型是一個數字。快照:data.frame中的字符串轉換向量元素
> df[[1]][1:10]
[1] 201001 201001 201001 201001 201001 201001 201001 201001 201001 201001
> str(df)
'data.frame': 2982393 obs. of 11 variables:
$ YearMonth : int 201001 201001 201001 201001 201001 201001 201001 201001 201001 201001 ...
$ ...
我想是在形如「YYYY-MM」這個值轉換成字符串(最終以因子),能夠與其他數據幀進行比較。
我正在努力尋找一種簡單的方法來改變價值。
我試過使用as.Date
和format
函數。但是由於這些價值觀沒有任何日子,所以它對Strings來說並不奏效。使用Numerics(與dataframe列相同),我甚至遇到了其他問題。
> as.Date("201001", format = "%Y%m")
[1] NA
> as.Date(201001, format = "%Y%m")
Error in as.Date.numeric(201001, format = "%Y%m") :
'origin' must be supplied
> as.Date(df[[1]], format = "%Y%m")
Error in as.Date.numeric(df[[1]], format = "%Y%m") :
'origin' must be supplied
我能夠改變只有一個值,使用subset
和字符串的串聯。 我寫了下面的公式,來處理一個元素:
transformString <- function(x) { # x = value
return (paste(cbind(substring(x, 1, 4),"-",substring(x,5,6)), collapse = ''))
}
問題:我沒有找到一個簡單的方法,以該功能適用於data.frame的一整列,其他不僅僅是遍歷所有元素:
transformStringVector <- function(x) { # x = vector
for(i in 1:length(x)) {
x[i]<-transformString(x[i])
}
return (x)
}
這遠遠不夠優雅和性能不好。我試圖用apply
(見下文)之類的東西,但面臨着錯誤...(我承認我真的不明白的apply
功能)
> temp <- apply(df[[1]], 1, transformString)
Error in apply(df[[1]], 1, transformString) :
dim(X) must have a positive length
有誰有內這種轉變的替代一個巨大的數據幀?或更一般;將類似字符串的轉換應用於data.frame中的元素的簡單方法?
不錯!這真的很有幫助!這讓我更深入瞭解性能和因素。謝謝! – FBE 2012-04-11 09:11:00