【问题标题】:R: Obtaining a Sample and putting it into a GroupR:获取样本并将其放入组中
【发布时间】:2015-10-22 13:07:57
【问题描述】:

所以基本上我必须从标准正态分布中获取一个随机样本,(称为 x)然后我必须对其进行排序,并将有序向量分成 10 个组,其中第一组包含 10 个最低的,所以在。现在我必须创建一个新向量,以便按照 x 的顺序,y 中的值是 x 的值所在的组号。也就是说,x 中的前 3 个值分别在组 2,5 和 4 中,那么 y 中的前 3 个值是 2,5,4... 谁能对我的代码提供一些帮助,看看我哪里出错了?

x<-rnorm(100, mean=0, sd =1)
y<-(c(x))
datart<-x[order(x)]
datart
v1<-datart[1:10]
v2<-datart[11:20]
v3<-datart[21:30]
v4<-datart[31:40]
v5<-datart[41:50]
v6<-datart[51:60]
v7<-datart[61:70]
v8<-datart[71:80]
v9<-datart[81:90]
v10<-datart[91:100]
for (i in y)
{
    if (i<-v1) print(1)
    else if (i<-v2) print(2)
    else if (i<-ve) print(3)
    else if (i<-v4) print(4)
    else if (i<-v5) print(5)
    else if (i<-v6) print(6)
    else if (i<-v7) print(7)
    else if (i<-v8) print(8)
    else if (i<-v9) print(9)
    else if (i<-v10) print(10)
}

【问题讨论】:

    标签: r


    【解决方案1】:
    res <- cut(x, quantile(x, seq(0, 1, 0.1)), 
             labels=paste0("v", 1:10), 
             include.lowest=TRUE)
    
    table(res)
    #res
    # v1  v2  v3  v4  v5  v6  v7  v8  v9 v10 
    # 10  10  10  10  10  10  10  10  10  10 
    

    ?cut 将向量分组。 ?quantile 用于创建用于分组的 bin,seq(0, 1, .1) 将分布划分为十分位数,如示例中所示。 labels 参数允许命名垃圾箱。 include.lowest 会将下限设置为“大于或等于”,而不仅仅是“大于”。

    如果您想访问以数字作为输出的组,有多个选项(命名向量、data.frame、向量子集),这仅取决于您接下来要做什么:

    我们可以创建一个将所有组分开的列表:

    split(x, res)
    # $v1
    #  [1] -1.880931 -2.030636 -1.744457 -1.488322
    #  [5] -1.235983 -2.436656 -1.604551 -1.380327
    #  [9] -1.418812 -1.737736
    # 
    # $v2
    #  [1] -1.2147030 -0.8343691 -0.8357011 -1.2101051
    #  [5] -1.1952688 -0.9705542 -0.8684121 -0.9311926 
    

    数据

    set.seed(777)
    x <- rnorm(100) 
    

    【讨论】:

      【解决方案2】:

      这是一个单行,以适应不同数量的组或不同的组大小。

      x   <- rnorm(100)
      out <- rep(1:10, each = 10)[order(order(x))]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多