gpt4 book ai didi

r - 使用因子水平将 corr 函数应用于矩阵?

转载 作者:行者123 更新时间:2023-12-02 00:11:04 24 4
gpt4 key购买 nike

我正在尝试使用 corr() 函数来计算加权权重。它的工作方式是第一个参数应该是一个矩阵,其中有两列对应于我们希望计算其相关性的两个变量,第二个参数是要应用于每对观察值的权重向量。

这是一个例子。

> head(d)
Shade_tolerance htot
1 4.56 25.0
2 2.73 23.5
3 2.73 21.5
4 3.97 17.0
5 4.00 25.5
6 4.00 23.5

> head(poids)
[1] 5.200440e-07 5.200440e-07 1.445016e-06 1.445016e-06 1.445016e-06 1.445016e-06

> corr(d,poids)
[1] 0.1357279

所以我明白了,我可以在我的矩阵上使用它,但我想根据一个因素的水平计算不同的相关性。假设我正在使用 tapply() 函数。

> head(d2)
Shade_tolerance htot idp
1 4.56 25.0 19
2 2.73 23.5 19
3 2.73 21.5 19
4 3.97 17.0 18
5 4.00 25.5 18
6 4.00 23.5 18

所以我的梦想是做这样的事情:

tapply(as.matrix(d2[,c(1,2)]), d2$idp, corr)

除了如您所知在 tapply() 中第一个元素需要是矢量而不是矩阵。

有人能为我提供任何解决方案吗?

非常感谢您的帮助。

编辑:我刚刚意识到我在向您展示的数据框部分中缺少加权相关性的权重。所以它会知道如何根据因子的水平来获取矩阵和权重。

> head(df)
Shade_tolerance htot idp poids
1 4.56 25.0 19 5.200440e-07
2 2.73 23.5 19 5.200440e-07
3 2.73 21.5 19 1.445016e-06
4 3.97 17.0 19 1.445016e-06
5 4.00 25.5 19 1.445016e-06
6 4.00 23.5 19 1.445016e-06

我希望它是清楚的。

最佳答案

如果您有一个“巨大的”data.frame,那么使用 data.table 可能会有所帮助:

require(data.table)
dt <- as.data.table(df)
setkey(dt, "idp")
dt[, list(corr = corr(cbind(Shade_tolerance, htot), poids)), by=idp]

# idp corr
# 1: 18 0.9743547
# 2: 19 0.8387363

关于r - 使用因子水平将 corr 函数应用于矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15380797/

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