2015-12-15 114 views
2

我有一個數字矢量,我從Excel中導入了格式爲「奇怪」的方式。例如:12.000代表12000.我想將所有具有小數的數字變量轉換爲整個值(在本例中乘以1000--因爲R讀取12.000爲12,而我真正想要的是12000)。我試圖將其轉換爲字符,然後操作它以添加零。我不認爲這是最好的方式,但我嘗試這樣的長相:將數字矢量轉換爲其他數字矢量

vec <- c(12.000, 5.300, 5.000, 33.400, 340, 3200) 
vec <- as.character(vec) 

> vec 
[1] "12" "5.3" "5" "33.4" "340" "3200" 



x <- "([0 -9]{1})" 
xx <- "([0 -9]{2})" 
x.x <- "([0 -9]{1}\\.[0 -9]{1})" 
xx.x <- "([0 -9]{2}\\.[0 -9]{1})" 

我創造了這個正則表達式所以我可以做的是創造條件,如果grep的(X,VEC)是真的,那麼我做:paste0(「000」,vec)當vec在條件集合中爲真時。我的想法是爲所有可能的情況做到這一點,即:添加「000」如果x或如果xx &如果x.x或如果xx.x添加「00」

有沒有人知道我能做什麼?如果有更簡單的想法?

謝謝!

+0

請出示期望的結果。爲什麼不嘗試用'colClasses =「character」'讀入它,然後使用'as.numeric(gsub(「[。]」,「」,df $ V1))' –

+0

'vec的內容不清楚'被派生/讀入?應該有一個上游解決方案。 – Benjamin

+0

你是如何從Excel導入數據的;先將它保存爲CSV?您的問題是因爲該文件使用大陸(歐洲)數字格式?如果是這樣,你可能想檢查在這個問題的最佳答案 http://stackoverflow.com/questions/6123378/how-to-read-in-numbers-with-a-comma-as-decimal-separator – Ricky

回答

1

您首先需要將矢量讀取爲character。如果你讀作numericR將它解釋爲一個號碼,並移除小數點後面跟着0

df <- read.csv(text= "Index, Vec 
      1, 12.00 
      2, 5.3 
      3, 5 
      4, 33.4 
      5, 340 
      6, 3200", 
      colClasses = c("numeric", "character")) 


isDot <- grepl("\\.", df$Vec) 
df$Vec[isDot] <- as.numeric(df$Vec[isDot])*1000 
df$Vec <- as.numeric(df$Vec)