Преобразование диапазона текста в одно целое число - PullRequest
0 голосов
/ 17 февраля 2020

если бы у меня был набор данных, содержащий следующее:

0-3
0-3
0-3
2-6
2-6
2-6
2-6
2-6
1-3

Как бы я преобразовал это в одно число, скажем, в верхнее значение, или даже лучше среднего из двух чисел по обе стороны от дефис?

Любая помощь будет высоко ценится!

Ответы [ 3 ]

3 голосов
/ 17 февраля 2020

Вы можете использовать read.table, чтобы разделить на - и использовать rowMeans, чтобы получить среднее значение.

x <- c("0-3", "2-6", "1-3")

rowMeans(read.table(text=x, sep="-"))
#[1] 1.5 4.0 2.0
1 голос
/ 17 февраля 2020

Другое базовое решение R

sapply(strsplit(dat,"-"),function(v) mean(as.numeric(v)))

или

rowMeans(`class<-`(do.call(rbind,strsplit(dat,"-")),"numeric"))

такое, что

# [1] 1.5 4.0 2.0

DATA

dat <- c("0-3", "2-6", "1-3")
1 голос
/ 17 февраля 2020

Вы можете использовать Tidyverse для этого

d <- c("0-1", "1-1","2-0")

data.frame(d) %>% separate(col = d, sep = "-", into = c("l", "r")) %>% 
  mutate(average = (as.numeric(l) + as.numeric(r) / 2))

  l r averaged
1 0 1      0.5
2 1 1      1.5
3 2 0      2.0

...