【问题标题】:How to create a single long variable ordered by and from multiple variables如何创建由多个变量排序的单个长变量
【发布时间】:2015-04-17 16:57:53
【问题描述】:

所以基本上我的数据设置为:

a=c(1,2,3); b=c(4,5,6); 依此类推 z=c(77,78,79); x=cbind(a,b,...,z)

我想从这些列 a 到 z 创建一个列,所以一些变量 alpha=c(1,2,3,4,5,6,...,78)。也就是说,有 a 的所有值,然后是 b 的所有值,然后列出 c 的所有值,一直到 z。有没有办法在 R 中快速做到这一点?

我尝试了 rbind、cbind 和几个长/短转换。这是看起来应该很简单的问题之一,但我不断得到矩阵。

【问题讨论】:

    标签: r


    【解决方案1】:
    dat <- data.frame(matrix(1:78, nrow = 3))
    colnames(dat) <- letters
    dat
      a b c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
    1 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76
    2 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77
    3 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78  
    
    alpha <- unlist(dat)
    alpha
    a1 a2 a3 b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3 h1 h2 h3 i1 i2 
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
    i3 j1 j2 j3 k1 k2 k3 l1 l2 l3 m1 m2 m3 n1 n2 n3 o1 o2 o3 p1 p2 p3 q1 q2 q3 r1 
    27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 
    r2 r3 s1 s2 s3 t1 t2 t3 u1 u2 u3 v1 v2 v3 w1 w2 w3 x1 x2 x3 y1 y2 y3 z1 z2 z3 
    53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 
    

    【讨论】:

    • 由于某种原因,可能是因为我的实际设置与上面的简单示例不同,您的解决方案不起作用。然而,JPP 的做法如下。谢谢您的回答。知道为什么 unlist 可能会完全返回我放入其中的内容吗?
    • 必须与您的data.frame 结构有关。尝试在您的问题中添加一个小示例,dput(head(myData)) 的输出应该可以帮助我们给出答案。
    【解决方案2】:

    c() 命令也可以。例如:

    x <-1:5
    y <-6:10
    z <-11:15
    
    data <-c(x,y,z)
    
    data
    
    [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    

    【讨论】:

    • JPP,感谢您的帮助。我不知道我是如何从未了解过 c() 命令的。我也已经使用 R 一段时间了。好消息:它奏效了。
    猜你喜欢
    • 2018-07-31
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2022-12-31
    相关资源
    最近更新 更多