Читать столбец как диапазоны для сравнения значений - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть столбец значений с диапазонами.Как мне установить R для чтения их как диапазонов для сравнения значений и определения, находится ли другое значение столбца в этом диапазоне?

> temp
  range1 number1
1   1:5      4
2  5:10     77
3  9:30     27

У меня проблемы с вводом этих значений в range ().Вот что я попробовал:

> range(temp$range1[1])
Error in Summary.factor(1L, na.rm = FALSE) : 
  ‘range’ not meaningful for factors
> as.numeric(temp$range1)
[1] 1 2 3

Не уверен, почему as.numeric превращает столбец в 1 2 3.

1 Ответ

3 голосов
/ 26 сентября 2019

Здесь нам нужно разделить «диапазон1» (если это класс factor, преобразовать в character, поскольку strsplit требуется вводить как character вектор), выполнить цикл вывода list из strsplit с lapply/sapply, преобразуйте элементы в numeric

sapply(strsplit(as.character(temp$range1), ":"), as.numeric)

здесь, range также не требуется, если seq находится с 1-го по 2-й элемент, так как мы без необходимости принимаемseq uence, а затем получите range


Если мы сравниваем со вторым столбцом, одним из вариантов после разбиения на ; будет сравнение (>, <), чтобы проверить, находится ли «число» между «диапазонами» или нет)

tmp1 <- read.table(text  = as.character(temp$range1),sep=":", header = FALSE)

with(tmp1, temp$number1 > tmp1$V1 & temp$number < tmp1$V2)

С tidyverse, опция будет

library(dplyr)
library(tidyr)
temp %>%
     separate(range1, into = c('low', 'high'), sep=":", 
          convert = TRUE, remove = FALSE) %>%
     mutate(flag = number1 > low & number1 < high)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...