如何使用方便的功能组织数据?
how to organize a data using a handy function?
人们常说,80% 的数据分析都花在了清理和准备数据上。
在这方面,我有时会花很多时间来塑造我的数据,并最终得到一个 data.frame
,如可重现的示例所示。
我想在我的数据中将行组织为列,并将它们排序为唯一值之一。
您可以假设 No
是一个关键列,它将确定转置数据框中的列数
这是一个可重现的例子;
set.seed(1)
No <- rep(seq(0,95,1),times=3)
AC <- rep(rep(c(78,110),each=1),times=length(No)/2)
AR <- rep(rep(c(256,320,384),each=2),times=length(No)/6)
AM <- rep(1,times=length(No))
DQ <- rep(rep(seq(0,15,1),each=6),times=3)
V <- rep(seq(100,300,100),each=96)
R <- rep(sample(5000:6000,96),times=3)
df <- data.frame(No,AC,AR,AM,DQ,V,R)
head(df)
No AC AR AM DQ V R
1 0 78 256 1 0 100 5455
2 1 110 256 1 0 100 5410
3 2 78 320 1 0 100 5810
4 3 110 320 1 0 100 5603
5 4 78 384 1 0 100 5652
6 5 110 384 1 0 100 5351
我正在寻找的输出;
# No 0 1 2 3 4 5 6 7 8 9 10 11 * * * 95
# AC 78 110 78 110 78 110 78 110 78 110 78 110 * * * 110
# AR 256 256 320 320 384 384 256 256 320 320 384 384 * * * 384
# AM 1 1 1 1 1 1 1 1 1 1 1 1 * * * 1
# DQ 0 0 0 0 0 0 1 1 1 1 1 1 * * * 15
# V
# 100 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 * * * 5722
# 200 5256 5720 5162 5481 5977 5711 5600 5752 5042 5885 5759 5467 * * * 5722
# 300 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 * * * 5722
您只是在寻找 tidyr
中的 spread
吗?那么你当然可以用t
转置。
t(spread(df, V, R))
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## No 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## AC 78 110 78 110 78 110 78 110 78 110 78 110 78 110 78 110 78
## AR 256 256 320 320 384 384 256 256 320 320 384 384 256 256 320 320 384
## AM 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## DQ 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 2 2
## 100 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 200 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 300 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
人们常说,80% 的数据分析都花在了清理和准备数据上。
在这方面,我有时会花很多时间来塑造我的数据,并最终得到一个 data.frame
,如可重现的示例所示。
我想在我的数据中将行组织为列,并将它们排序为唯一值之一。
您可以假设 No
是一个关键列,它将确定转置数据框中的列数
这是一个可重现的例子;
set.seed(1)
No <- rep(seq(0,95,1),times=3)
AC <- rep(rep(c(78,110),each=1),times=length(No)/2)
AR <- rep(rep(c(256,320,384),each=2),times=length(No)/6)
AM <- rep(1,times=length(No))
DQ <- rep(rep(seq(0,15,1),each=6),times=3)
V <- rep(seq(100,300,100),each=96)
R <- rep(sample(5000:6000,96),times=3)
df <- data.frame(No,AC,AR,AM,DQ,V,R)
head(df)
No AC AR AM DQ V R
1 0 78 256 1 0 100 5455
2 1 110 256 1 0 100 5410
3 2 78 320 1 0 100 5810
4 3 110 320 1 0 100 5603
5 4 78 384 1 0 100 5652
6 5 110 384 1 0 100 5351
我正在寻找的输出;
# No 0 1 2 3 4 5 6 7 8 9 10 11 * * * 95
# AC 78 110 78 110 78 110 78 110 78 110 78 110 * * * 110
# AR 256 256 320 320 384 384 256 256 320 320 384 384 * * * 384
# AM 1 1 1 1 1 1 1 1 1 1 1 1 * * * 1
# DQ 0 0 0 0 0 0 1 1 1 1 1 1 * * * 15
# V
# 100 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 * * * 5722
# 200 5256 5720 5162 5481 5977 5711 5600 5752 5042 5885 5759 5467 * * * 5722
# 300 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 * * * 5722
您只是在寻找 tidyr
中的 spread
吗?那么你当然可以用t
转置。
t(spread(df, V, R))
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## No 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## AC 78 110 78 110 78 110 78 110 78 110 78 110 78 110 78 110 78
## AR 256 256 320 320 384 384 256 256 320 320 384 384 256 256 320 320 384
## AM 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## DQ 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 2 2
## 100 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 200 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 300 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706