按R中的组转置数据

Tom*_*eif 7 r data-manipulation reshape

我有以下结构的数据:

x <- read.table(header=T, text="
X Y D S
a e 1 10
a e 2 20
a f 1 50
b c 1 40
b c 2 30
b c 3 60
b d 1 10 
b d 2 20")
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果:

X Y   1   2   3
a e  10  20
a f  50
b c  40  30  60
b d  10  20
Run Code Online (Sandbox Code Playgroud)

对于列的每个组合XY我想转列数据S的顺序列D.

我认为xtabs()会有用,但我不这么认为,我最好的版本是:

xtabs(formula=S~Y+D,data=x)
Run Code Online (Sandbox Code Playgroud)

结果如下:

   D
Y    1  2  3
  c 40 30 60
  d 10 20  0
  e 10 20  0
  f 50  0  0
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 11

require(reshape2)
dcast(x, X + Y ~ D, value.var="S")
Run Code Online (Sandbox Code Playgroud)

如果要填充空条目0而不是NA(这是默认值),那么,

dcast(x, X + Y ~ D, value.var="S", fill=0)
Run Code Online (Sandbox Code Playgroud)


Fer*_*aft 7

基础R的解决方案:

> reshape(x, timevar="D", idvar=c("X","Y"), direction="wide")
  X Y S.1 S.2 S.3
1 a e  10  20  NA
3 a f  50  NA  NA
4 b c  40  30  60
7 b d  10  20  NA
Run Code Online (Sandbox Code Playgroud)