R: преобразовать дробь в десятичную строку - PullRequest
1 голос
/ 01 июня 2019

Я хочу преобразовать некоторые дробные символы в строке в десятичный формат, но сохранить контекст остальной части строки, чтобы:

enter image description here

становится:

enter image description here

Этот ответ похож на то, что я хочу сделать, но когда настроено на мойВ случае использования он не сохраняет оставшуюся часть строки и, похоже, полностью разрушается при использовании во фрейме данных.

library(gsubfn)

calc <- function(s) {
  x <- c(if (length(s) == 2) 0, as.numeric(s), 0:1)
  x[1] + x[2] / x[3]
}

ff <- c('1 1/2', '2 3/4', '2/3', '11 1/4', '5/4')
sapply(strapplyc(ff, "\\d+"), calc)
#1.5000000  2.7500000  0.6666667 11.2500000  1.2500000

ef = c('1 1/2" ant', '2 3/4" apple', '2/3" berry', '11" 1/4 plum', '5/4" orange')
sapply(strapplyc(ef, "\\d+"), calc)
#1.5000000  2.7500000  0.6666667 11.2500000  1.2500000

df <- as.data.frame(ef)
sapply(strapplyc(df$ef, "\\d+"), calc)
#2 3 4 1 5

1 Ответ

1 голос
/ 01 июня 2019

Опция будет gsubfn

gsubfn("(\\d+) (\\d+)", ~ as.numeric(x) + as.numeric(y), 
     gsubfn("(\\d+)/(\\d+)", ~ as.numeric(x)/as.numeric(y), ef))
...