根据值的范围按行对数据进行排序

时间:2014-05-05 14:24:05

标签: r import-from-csv

我的数据是:

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 个答案:

答案 0 :(得分:0)

您可以使用subset

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

等等。也许你可以改进代码以避免对范围进行硬编码。

答案 1 :(得分:0)

使用此数据

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)
)

我会使用cut来创建一个表示模型类的因子

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

然后,您可以使用拆分创建子数据列表。框架

split(data, model)

这可能比一堆不同的data.frame变量更容易使用。