R中数据帧和数据帧列表之间的相关性
Correlations between dataframe and list of dataframes in R
我想计算数据帧和数据帧列表之间的相关性。这是我的样本:
library(lubridate)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(2,20, length = 10)
v3 = seq(-2,7, length = 10)
v4 = seq(-6,3, length = 10)
df1 = data.frame(Date = v1, Tmax = v2, Tmean = v3, Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(3,21, length = 10)
v3 = seq(-3,8, length = 10)
v4 = seq(-7,4, length = 10)
abc = data.frame(Date = v1, ABC_Tmax = v2, ABC_Tmean = v3, ABC_Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(4,22, length = 10)
v3 = seq(-4,9, length = 10)
v4 = seq(-8,5, length = 10)
def = data.frame(Date = v1, DEF_Tmax = v2, DEF_Tmean = v3, DEF_Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(2,20, length = 10)
v3 = seq(-2,8, length = 10)
v4 = seq(-6,3, length = 10)
ghi = data.frame(Date = v1, GHI_Tmax = v2, GHI_Tmean = v3, GHI_Tmin = v4)
df2 <-list(abc, def, ghi)
names(df2) = c("ABC", "DEF", "GHI")
我想要 df1 和 df2 之间的所有相关系数,但只是按列。
例如:
- df1$Tmax 和所有 df2*Tmax 列
- df1$Tmean 和所有 df2*Tmean 列
- df1$Tmin 和所有 df2*Tmin 列
我知道我可以像这样访问所有 Tmax 列:
lapply(df2, "[[", 2)
我知道如何计算两个单值之间的相关性:
cor.test(df1$Tmax, df2$ABC$ABC_Tmax, method = "spearman")
但是我怎样才能一次对所有列执行此操作?我试过这个,但不起作用:
cor.test(df1$Tmax, lapply(df2, "[[", 2), method = "spearman")
有什么想法吗?
您可以结合使用 lapply
和 mapply
来应用 cor.test
并从测试中提取特定值。例如,要获得 p.value
和 estimate
我们可以做
lapply(2:4, function(i) mapply(function(x, y) {
a <- cor.test(x, y, method = "spearman")
c(setNames(a$p.value, "pvalue"), a$estimate)
}, lapply(df2, "[[", i), df1[i]))
我想计算数据帧和数据帧列表之间的相关性。这是我的样本:
library(lubridate)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(2,20, length = 10)
v3 = seq(-2,7, length = 10)
v4 = seq(-6,3, length = 10)
df1 = data.frame(Date = v1, Tmax = v2, Tmean = v3, Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(3,21, length = 10)
v3 = seq(-3,8, length = 10)
v4 = seq(-7,4, length = 10)
abc = data.frame(Date = v1, ABC_Tmax = v2, ABC_Tmean = v3, ABC_Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(4,22, length = 10)
v3 = seq(-4,9, length = 10)
v4 = seq(-8,5, length = 10)
def = data.frame(Date = v1, DEF_Tmax = v2, DEF_Tmean = v3, DEF_Tmin = v4)
v1 = seq(ymd('2000-05-01'),ymd('2000-05-10'),by='day')
v2 = seq(2,20, length = 10)
v3 = seq(-2,8, length = 10)
v4 = seq(-6,3, length = 10)
ghi = data.frame(Date = v1, GHI_Tmax = v2, GHI_Tmean = v3, GHI_Tmin = v4)
df2 <-list(abc, def, ghi)
names(df2) = c("ABC", "DEF", "GHI")
我想要 df1 和 df2 之间的所有相关系数,但只是按列。
例如:
- df1$Tmax 和所有 df2*Tmax 列
- df1$Tmean 和所有 df2*Tmean 列
- df1$Tmin 和所有 df2*Tmin 列
我知道我可以像这样访问所有 Tmax 列:
lapply(df2, "[[", 2)
我知道如何计算两个单值之间的相关性:
cor.test(df1$Tmax, df2$ABC$ABC_Tmax, method = "spearman")
但是我怎样才能一次对所有列执行此操作?我试过这个,但不起作用:
cor.test(df1$Tmax, lapply(df2, "[[", 2), method = "spearman")
有什么想法吗?
您可以结合使用 lapply
和 mapply
来应用 cor.test
并从测试中提取特定值。例如,要获得 p.value
和 estimate
我们可以做
lapply(2:4, function(i) mapply(function(x, y) {
a <- cor.test(x, y, method = "spearman")
c(setNames(a$p.value, "pvalue"), a$estimate)
}, lapply(df2, "[[", i), df1[i]))