2015-12-15 118 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)