将数值向量转换为其他数值向量

时间:2015-12-15 01:22:57

标签: r grep regular-language

我有一个我从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为真时。我的想法是针对所有可能的情况执行此操作,其中:如果x或xx&amp; x,则添加“000”。如果x.x或xx.x

,请添加“00”

有没有人知道我能做些什么?如果有任何更简单的想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

您首先需要将矢量读作character。如果您阅读为numeric R,则将其解释为数字并删除小数后跟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)