我想使用强制转换功能(重塑包装)以返回到原始数据框状态,但是不起作用。 在我的示例中:
#First simulate some data
set.seed(123)
bands=5
data <- data.frame(matrix(runif(10*bands),ncol=bands))
colnames(data) <- paste0(1:bands)
data$nitrogen <- rpois(10,10)
data$Class<-rep("test",10)
#
# Reshape with melt function
library(reshape)
data2 <- melt(data, id=c("nitrogen","Class"))
#Return to original data state again
data3<-cast(data2, Class+nitrogen~variable)
data3
Class nitrogen 1 2 3 4 5
1 test 4 1 1 1 1 1
2 test 5 1 1 1 1 1
3 test 6 2 2 2 2 2
4 test 8 1 1 1 1 1
5 test 11 1 1 1 1 1
6 test 12 4 4 4 4 4
我期望:
1 2 3 4 5 nitrogen Class
1 0.2875775 0.95683335 0.8895393 0.96302423 0.1428000 4 test
2 0.7883051 0.45333416 0.6928034 0.90229905 0.4145463 6 test
3 0.4089769 0.67757064 0.6405068 0.69070528 0.4137243 6 test
...
10 0.4566147 0.95450365 0.1471136 0.23162579 0.8578277 11 test
返回数据对象的转换方法不起作用,请任何成员帮助我吗? 谢谢
答案 0 :(得分:1)
类和氮的组合不是唯一的:类==“ test”和氮== 11的次数是四次,类==“ test”和氮== 6的次数是六次。来自帮助文档:
如果您提供的变量组合不能唯一地标识原始数据集中的一行,那么您将需要提供一个汇总函数fun.aggregate。此函数应采用数字向量并返回汇总统计信息。
因此,cast
将汇总重复的组合。除非您输入某种使组合唯一的虚拟变量,否则您将无法恢复原始数据。
data$dummy <- 1:10
data3 <- cast(data2, Class + nitrogen + dummy ~ variable)
data3
Class nitrogen dummy 1 2 3 4 5
1 test 4 1 0.2875775 0.95683335 0.8895393 0.96302423 0.1428000
2 test 5 5 0.9404673 0.10292468 0.6557058 0.02461368 0.1524447
3 test 6 2 0.7883051 0.45333416 0.6928034 0.90229905 0.4145463
4 test 6 3 0.4089769 0.67757064 0.6405068 0.69070528 0.4137243
5 test 8 4 0.8830174 0.57263340 0.9942698 0.79546742 0.3688455
6 test 11 10 0.4566147 0.95450365 0.1471136 0.23162579 0.8578277
7 test 12 6 0.0455565 0.89982497 0.7085305 0.47779597 0.1388061
8 test 12 7 0.5281055 0.24608773 0.5440660 0.75845954 0.2330341
9 test 12 8 0.8924190 0.04205953 0.5941420 0.21640794 0.4659625
10 test 12 9 0.5514350 0.32792072 0.2891597 0.31818101 0.2659726
如果希望虚拟列完全相同,请更改列的顺序并将其删除。
data3[,c(4:8, 2, 1)]
1 2 3 4 5 nitrogen Class
1 0.2875775 0.95683335 0.8895393 0.96302423 0.1428000 4 test
2 0.9404673 0.10292468 0.6557058 0.02461368 0.1524447 5 test
3 0.7883051 0.45333416 0.6928034 0.90229905 0.4145463 6 test
4 0.4089769 0.67757064 0.6405068 0.69070528 0.4137243 6 test
5 0.8830174 0.57263340 0.9942698 0.79546742 0.3688455 8 test
6 0.4566147 0.95450365 0.1471136 0.23162579 0.8578277 11 test
7 0.0455565 0.89982497 0.7085305 0.47779597 0.1388061 12 test
8 0.5281055 0.24608773 0.5440660 0.75845954 0.2330341 12 test
9 0.8924190 0.04205953 0.5941420 0.21640794 0.4659625 12 test
10 0.5514350 0.32792072 0.2891597 0.31818101 0.2659726 12 test