2015-05-04 58 views
0

我有一個非常大的銷售數據(df8)數據框。加載時,我想將數字加載的一些變量作爲chr加載。我想要將colname包含單詞「Order」的每一列從chr更改爲numeric。我怎樣才能做到這一點?根據姓氏中的子字符串更改coltypes

+0

也許'?as.numeric'將是有益的。 – r2evans

+0

多少列你有什麼? – Soheil

+0

找出爲什麼他們被導入爲字符(或最有可能的因素)。可能有'NA'字符串,您應該指定爲導入或可能有拼寫錯誤或不尋常的格式或重要的評論在數據列或... – Roland

回答

1

我將使用函數grepl來查找「order」的出現次數並遍歷每列並將其轉換爲數字。請注意,該變量實際上是字符,如果你的數據是一個因素,它不會工作(即需要(as.numeric(as.character(x)))。

# create data.frame with characters 
xy <- data.frame(a = runif(5), b.order = runif(5), cOrder = runif(5)) 
xy[, c(2, 3)] <- sapply(xy[, c(2, 3)], FUN = as.character) 
str(xy) 
'data.frame': 5 obs. of 3 variables: 
$ a  : num 0.914 0.468 0.106 0.624 0.841 
$ b.order: chr "0.363523897947744" "0.56488766730763" "0.42081760126166" "0.560672372812405" ... 
$ cOrder : chr "0.949268750846386" "0.596737345447764" "0.368769273394719" "0.717566329054534" ... 

with.order <- grepl("order", names(xy), ignore.case = TRUE) 

xy[, with.order] <- sapply(xy[, with.order], FUN = as.numeric) 
str(xy) 
'data.frame': 5 obs. of 3 variables: 
$ a  : num 0.914 0.468 0.106 0.624 0.841 
$ b.order: num 0.364 0.565 0.421 0.561 0.768 
$ cOrder : num 0.949 0.597 0.369 0.718 0.417 
+0

請注意,這可以治癒症狀我們從現實生活中知道往往不是最佳的行動方案。 – Roland

+0

並且該解決方案是'read.csv(... colClasses)' – smci

+0

@smci那也不調查爲什麼他們沒有得到預期的類。 – Roland

相關問題