如何在R或Excel中将不同的组从一个列转移到另一个列

我search了几个答案,但似乎没有人能回答我的问题

我有一个这样的数据(2列,2组“1”和组“2”)

  • 1 10
  • 1 20
  • 1 50
  • 2 40
  • 2 30
  • 2 60

而且我想按照每个组将列转置,结果将如下所示

  • 1 1 1
  • 10 20 50
  • 2 2 2
  • 40 30 60

由于我有很多团体,我不能一个一个的手动去做。 任何人都可以帮我吗? 谢谢。

谢谢你们,因为所有的团队都有相同的长度(受Floris评论的启发),实际上我可以简单地用matrix来解决问题

x=read.table(header=F,text="10 20 50 40 30 60") matrix(x,nrow=2,byrow=T) 

 x <- read.table(header=F, text="1 10 1 20 1 50 2 40 2 30 2 60") do.call(rbind, by(x, x$V1, FUN=t)) ## 1 2 3 ## V1 1 1 1 ## V2 10 20 50 ## V1 2 2 2 ## V2 40 30 60 

如果你知道如何使用VBA,写一个简短的sub()就可以了。 我很难编码的地址 – 你可以弄清楚如何移动它。 我假设您调用此macros时您的数据位于活动工作表中,并且您希望副本显示在原始的右侧(位于列A和B中,从第2行开始 – 为上面的标签提供空间)。 另外,我将假设你的团队被编号为1,2,3,并且你不需要复制它们的值。 然后代码看起来像这样(按F-11打开VBA编辑器,插入一个模块,并复制这个)

 Sub bigSwap() dim R as Range, c as Range dim grp dim grpCount(1 To 100) ' assuming no more than 100 groups, or adjust this number dim i ' just making sure it's properly initialized for i=1 To 100 grpCount(ii)=0 next i Set R = Range("B2", [B2].End(xlDown)) ' this finds all the cells with values ' note - I am using [B2] as shorthand for Range("B2") For each c in R.cells grp = c.offset(0, -1).value ' find the corresponding group [D1].offset(grp, grpCount(grp)).value = c.value grpCount(grp) = grpCount(grp)+1 ' keep track of # in this row next End Sub 

我无法testing这个,但我相信这是好的。 如果遇到问题,请留下评论。

将列的单元格簇转置为行

假设A2:A16包含数据,请尝试…

C2,横跨和下来复制:

 =INDEX($A$2:$A$16,ROWS(C$2:C2)*3-3+COLUMNS($C2:C2)) 

相应地调整参考。

先尝试一行然后做下一步,然后合并