gpt4 book ai didi

r - 将熔化与矩阵或data.frame一起使用可提供不同的输出

转载 作者:行者123 更新时间:2023-12-04 10:25:15 26 4
gpt4 key购买 nike

考虑以下代码:

set.seed(1)
M = matrix(rnorm(9), ncol = 3)
dimnames(M) = list(LETTERS[1:3], LETTERS[1:3])

print(M)
A B C
A -0.6264538 1.5952808 0.4874291
B 0.1836433 0.3295078 0.7383247
C -0.8356286 -0.8204684 0.5757814

melt(M)

Var1 Var2 value
1 A A -0.6264538
2 B A 0.1836433
3 C A -0.8356286
4 A B 1.5952808
5 B B 0.3295078
6 C B -0.8204684
7 A C 0.4874291
8 B C 0.7383247
9 C C 0.5757814

如果我使用 melt调用 data.frame,则会得到不同的结果:
DF = data.frame(M)

melt(DF)

variable value
1 A -0.6264538
2 A 0.1836433
3 A -0.8356286
4 B 1.5952808
5 B 0.3295078
6 B -0.8204684
7 C 0.4874291
8 C 0.7383247
9 C 0.5757814

我发现文档对此有些困惑,因此任何人都可以帮助我了解这种行为?我可以使用data.frame获得第一个结果吗?

最佳答案

根本原因是methods有不同的melt,可以通过运行methods("melt")看到。其中大多数都可以通过reshape2:::melt.matrixreshape2:::melt.data.frame进行访问,这可以使您不遗余力地弄清楚结果为何不同。

但是,总结一下您会发现的内容,基本上,melt.matrix最终会做类似的事情:

cbind(expand.grid(dimnames(M)), value = as.vector(M))
# Var1 Var2 value
# 1 A A -0.6264538
# 2 B A 0.1836433
# 3 C A -0.8356286
# 4 A B 1.5952808
# 5 B B 0.3295078
# 6 C B -0.8204684
# 7 A C 0.4874291
# 8 B C 0.7383247
# 9 C C 0.5757814

...而 melt.data.frame最终将执行以下操作:
N <- data.frame(M)
data.frame(var1 = rep(names(N), each = nrow(N)), value = unlist(unname(N)))
# var1 value
# 1 A -0.6264538
# 2 A 0.1836433
# 3 A -0.8356286
# 4 B 1.5952808
# 5 B 0.3295078
# 6 B -0.8204684
# 7 C 0.4874291
# 8 C 0.7383247
# 9 C 0.5757814

当然,实际函数会执行更多的错误检查,其目的是让您方便地指定应熔化的列等。

请注意, data.frame方法未使用 rownames,因此如注释中所述,要获得与oj​​it_code方法相同的结果,必须将它们添加到 data.frame命令中。

关于r - 将熔化与矩阵或data.frame一起使用可提供不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com