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)
对于列的每个组合X
和Y
我想转列数据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)
基础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)