使用 reshape2 对数据框的第一列重新排序
Use reshape2 to reorder the first columns of a data frame
我有一个名为 toyData.txt 的数据集,
它检查参数 (n,mu,sigma) 对
正态分布随机数和读数的期望和方差
n mu sigma Mean Variance
100 0 1 0.0068 0.9923
100 0 2 0.0281 3.9589
100 5 1 4.9983 1.0055
100 5 2 4.9850 3.9318
1000 0 1 0.0005 1.0042
1000 0 2 0.0041 3.9920
1000 5 1 4.9886 1.0004
1000 5 2 5.0019 3.9582
我想使用 R 中的库 (reshap2) 重新排序 (n,mu,sigma)
到 (mu,sigma,n) [或 (sigma, mu,n)] 和
相应地重新排列均值和方差的值,
然后我试试
dat1 = read.table("toyData.txt", head=T)
library(reshape2)
dat2 = melt(dat1, id.vars=c("mu","sigma","n"))
# dat3 = dcast(melt(dat1), ???)
然后我有 dat2 作为
mu sigma n variable value
0 1 100 Mean 0.0068
0 2 100 Mean 0.0281
5 1 100 Mean 4.9983
5 2 100 Mean 4.9850
0 1 1000 Mean 0.0005
0 2 1000 Mean 0.0041
5 1 1000 Mean 4.9886
5 2 1000 Mean 5.0019
0 1 100 Variance 0.9923
0 2 100 Variance 3.9589
5 1 100 Variance 1.0055
5 2 100 Variance 3.9318
0 1 1000 Variance 1.0042
0 2 1000 Variance 3.9920
5 1 1000 Variance 1.0004
5 2 1000 Variance 3.9582
但是,我希望输出为
mu sigma n Mean Variance
0 1 100 0.0068 0.9923
0 1 1000 0.0005 1.0042
0 2 100 0.0281 3.9589
0 2 1000 0.0041 3.9920
5 1 100 4.9983 1.0055
5 1 1000 4.9886 1.0004
5 2 100 4.9850 3.9318
5 2 1000 5.0019 3.9582
那我就不知道怎么办了。
我知道我们可以手动解决这个问题,因为
这是一个小数据框,我想知道
是否有办法通过中的包修复它
我们遇到大型数据集的情况。
无需整形。
只需更改列的顺序,然后排列..
library( tidyverse )
df %>%
select( mu, sigma, everything() ) %>%
arrange( mu, sigma, n )
# mu sigma n Mean Variance
# 1 0 1 100 0.0068 0.9923
# 2 0 1 1000 0.0005 1.0042
# 3 0 2 100 0.0281 3.9589
# 4 0 2 1000 0.0041 3.9920
# 5 5 1 100 4.9983 1.0055
# 6 5 1 1000 4.9886 1.0004
# 7 5 2 100 4.9850 3.9318
# 8 5 2 1000 5.0019 3.9582
如前所述,您不需要整形。您还可以使用 data.table
对数据帧进行排序:
library(data.table)
setDT(dat1)[order(mu,sigma),.(mu,sigma, n, Mean, Variance)]
#returns
mu sigma n Mean Variance
1: 0 1 100 0.0068 0.9923
2: 0 1 1000 0.0005 1.0042
3: 0 2 100 0.0281 3.9589
4: 0 2 1000 0.0041 3.9920
5: 5 1 100 4.9983 1.0055
6: 5 1 1000 4.9886 1.0004
7: 5 2 100 4.9850 3.9318
8: 5 2 1000 5.0019 3.9582
我有一个名为 toyData.txt 的数据集, 它检查参数 (n,mu,sigma) 对 正态分布随机数和读数的期望和方差
n mu sigma Mean Variance
100 0 1 0.0068 0.9923
100 0 2 0.0281 3.9589
100 5 1 4.9983 1.0055
100 5 2 4.9850 3.9318
1000 0 1 0.0005 1.0042
1000 0 2 0.0041 3.9920
1000 5 1 4.9886 1.0004
1000 5 2 5.0019 3.9582
我想使用 R 中的库 (reshap2) 重新排序 (n,mu,sigma) 到 (mu,sigma,n) [或 (sigma, mu,n)] 和 相应地重新排列均值和方差的值, 然后我试试
dat1 = read.table("toyData.txt", head=T)
library(reshape2)
dat2 = melt(dat1, id.vars=c("mu","sigma","n"))
# dat3 = dcast(melt(dat1), ???)
然后我有 dat2 作为
mu sigma n variable value
0 1 100 Mean 0.0068
0 2 100 Mean 0.0281
5 1 100 Mean 4.9983
5 2 100 Mean 4.9850
0 1 1000 Mean 0.0005
0 2 1000 Mean 0.0041
5 1 1000 Mean 4.9886
5 2 1000 Mean 5.0019
0 1 100 Variance 0.9923
0 2 100 Variance 3.9589
5 1 100 Variance 1.0055
5 2 100 Variance 3.9318
0 1 1000 Variance 1.0042
0 2 1000 Variance 3.9920
5 1 1000 Variance 1.0004
5 2 1000 Variance 3.9582
但是,我希望输出为
mu sigma n Mean Variance
0 1 100 0.0068 0.9923
0 1 1000 0.0005 1.0042
0 2 100 0.0281 3.9589
0 2 1000 0.0041 3.9920
5 1 100 4.9983 1.0055
5 1 1000 4.9886 1.0004
5 2 100 4.9850 3.9318
5 2 1000 5.0019 3.9582
那我就不知道怎么办了。 我知道我们可以手动解决这个问题,因为 这是一个小数据框,我想知道 是否有办法通过中的包修复它 我们遇到大型数据集的情况。
无需整形。 只需更改列的顺序,然后排列..
library( tidyverse )
df %>%
select( mu, sigma, everything() ) %>%
arrange( mu, sigma, n )
# mu sigma n Mean Variance
# 1 0 1 100 0.0068 0.9923
# 2 0 1 1000 0.0005 1.0042
# 3 0 2 100 0.0281 3.9589
# 4 0 2 1000 0.0041 3.9920
# 5 5 1 100 4.9983 1.0055
# 6 5 1 1000 4.9886 1.0004
# 7 5 2 100 4.9850 3.9318
# 8 5 2 1000 5.0019 3.9582
如前所述,您不需要整形。您还可以使用 data.table
对数据帧进行排序:
library(data.table)
setDT(dat1)[order(mu,sigma),.(mu,sigma, n, Mean, Variance)]
#returns
mu sigma n Mean Variance
1: 0 1 100 0.0068 0.9923
2: 0 1 1000 0.0005 1.0042
3: 0 2 100 0.0281 3.9589
4: 0 2 1000 0.0041 3.9920
5: 5 1 100 4.9983 1.0055
6: 5 1 1000 4.9886 1.0004
7: 5 2 100 4.9850 3.9318
8: 5 2 1000 5.0019 3.9582