Сортировать данные по строкам на основе диапазона значений

Мои данные:

phone   colour  length  weight  rating
100       5      3        3      0
200                       1      4
303       3     30               9
302       2     43        0      2
106      43         
203      23      3        1      7

Я хочу, чтобы мои данные выглядели так:

Переменная A (sort_by_model_100):

phone   colour  length  weight  rating
  100         5      3        3      0
  106        43         

Переменная B (sort_by_model_200):

phone   colour  length  weight  rating
200       4      20       1      4
203      23      3        1      7

Переменная C (sort_by_model_300):

     phone  colour  length  weight  rating
      303     3       30       0      9
      302     2       43       0      2

Мой код R:

data <- read.csv(file.choose(),header=TRUE)

sort_by_model_100 <- split (data, data$phone[100:200])
sort_by_model_200 <- split (data, data$phone[200:300])
sort_by_model_300 <- split (data, data$phone[300:400])

Я получаю эту ошибку, и мой код не работает:

Предупреждающее сообщение:
В split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...):
длина данных не кратна переменной разделения

Пожалуйста помоги.

2 ответа

Решение

Ты можешь использовать subset:

var_a = subset(data, phone >= 100 & phone < 200)
var_b = subset(data, phone >= 200 & phone < 300)

И так далее. Может быть, вы можете улучшить код, чтобы избежать жесткого кодирования диапазонов.

С этими данными

data<-data.frame(
    phone=c(100,200,303,302,106,203),
    colour=c(5,NA,3,2,43,23),
    length=c(3,NA,30,43,NA,3),
    weight=c(3,1,NA,0,NA,1),
    rating=c(0,4,9,2,NA,7)
)

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

model<-cut(data$phone, breaks=c(100,200,300,400), include.lowest=T, right=F)

Затем вы можете использовать split для создания списка sub-data.frames

split(data, model)

С этим, вероятно, будет легче работать, чем с множеством различных переменных data.frame.

Другие вопросы по тегам