2015-12-15 3 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 (х, VEC) true, то я делаю: paste0 ("000", vec), когда vec истинно в установленном состоянии. Моя идея состоит в том, чтобы сделать это для всех возможных случаев: добавьте «000», если x или если xx & добавить «00», если x.x или если xx.x

Есть ли у кого-нибудь идеи, что я могу сделать? Если есть более простая идея?

спасибо !!

+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) 
Смежные вопросы