преобразовать научную нотацию в символьную

#r #regex

#r #регулярное выражение

Вопрос:

У меня есть фрейм данных, который должен быть символом с шаблоном num, char, num, num (пример: 1C72), но любое наблюдение с E было записано в научной нотации в исходном csv. (пример: 8.00E 04)

Вот что я пробовал:

 library(data.table)
library(dplyr)
example = as.data.frame(c("1B73","1C24","2.00E 08", "4.00E 04", "SBV123"))
colnames(example)[1] <- "x"
example$x = as.character(example$x)

#isolate problematic column  
setDT(example)[nchar(example$x) == 8, x8:=x]

#create new columns for data we want  
example$a <- substr(example$x8,1,1)
example$b <- substr(example$x8,5,5)
example$c <- substr(example$x8,7,8)
example$good <- paste(example$a,example$b,example$c,sep = "")
example$good[example$good == "NANANA"] <- NA

#combine good data:  
example = example %>% mutate(g2 = coalesce(good, x))
  

Это решение работает, но оно довольно длинное и создает много столбцов. Есть ли какой-либо способ сделать это, не создавая кучу столбцов?

Желаемый результат:

 |g2    |
|1B73  |
|1C24  |
|2E08  |
|4E04  |
|SBV123|
  

Комментарии:

1. не могли бы вы предоставить желаемый результат? Я не думаю, что вам нужно загружать все эти пакеты, чтобы достичь того, чего вы хотите…

2. может быть, вы могли бы просто gsub все из . в и сохранить только E? gsub(«\..*(E).*\ «, «\1», c(«1B73», «1C24», «2.00E 08», «4.00E 04», «SBV123»))

3. Использовать formatC? set.seed(1); x = runif(10, 0, 2)^runif(10,5,10); formatC(x, format = "E", digits=0) затем вы можете вычесть , если действительно хотите.

4. вероятно, gsub("(\.00)|(\ )", "", c("1B73","1C24","2.00E 08", "4.00E 04", "SBV123")) подойдет. Хотя лучше всего было бы убедиться, что что-либо хорошо отформатировано в csv…

5. Кэт, это сработало. Спасибо