Сортировать данные по строкам на основе диапазона значений
Мои данные:
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.