Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从data.frame中的cor.test()中提取p.value和估计值?_R_For Loop - Fatal编程技术网

如何从data.frame中的cor.test()中提取p.value和估计值?

如何从data.frame中的cor.test()中提取p.value和估计值?,r,for-loop,R,For Loop,在本例中,我有来自50个不同站点的温度值,我想将Site1与所有50个站点关联起来。但是,我只想将data.frame中使用函数cor.test()生成的组件“p.value”和“estimate”提取到两个不同的列中 我已经做了我的尝试,它的工作,但我不知道如何! 出于这个原因,我想知道如何简化代码,因为问题是我必须运行两次“For”循环才能得到结果 以下是我的例子: # Temperature data data <- matrix(rnorm(500, 10:30, sd=5),

在本例中,我有来自50个不同站点的温度值,我想将Site1与所有50个站点关联起来。但是,我只想将data.frame中使用函数cor.test()生成的组件“p.value”“estimate”提取到两个不同的列中

我已经做了我的尝试,它的工作,但我不知道如何! 出于这个原因,我想知道如何简化代码,因为问题是我必须运行两次“For”循环才能得到结果

以下是我的例子:

# Temperature data
 data <- matrix(rnorm(500, 10:30, sd=5), nrow = 100, ncol = 50, byrow = TRUE,
               dimnames = list(c(paste("Year", 1:100)),
                               c(paste("Site", 1:50))) )
# Empty data.frame
 df <- data.frame(label=paste("Site", 1:50), Estimate="", P.value="")

# Extraction
for (i in 1:50) {
 df1 <- cor.test(data[,1], data[,i] )
 df[,2:3] <- df1[c("estimate", "p.value")]
   }

for (i in 1:50) {
  df1 <- cor.test(data[,1], data[,i] )
 df[i,2:3] <- df1[c("estimate", "p.value")]
   }

 df
#温度数据

数据首先,我猜你的代码中有一个输入错误(如果你想要唯一的值,你应该有
rnorm(5000
),否则你将在这500个数字中循环10次

无论如何,一个简单的方法是:

data <- matrix(rnorm(5000, 10:30, sd=5), nrow = 100, ncol = 50, byrow = TRUE,
               dimnames = list(c(paste("Year", 1:100)),
                               c(paste("Site", 1:50))) )
# Empty data.frame
df <- data.frame(label=paste("Site", 1:50), Estimate="", P.value="")
estimates = numeric(50)
pvalues = numeric(50)
for (i in 1:50){
  test <- cor.test(data[,1], data[,i])
  estimates[i] = test$estimate
  pvalues[i] = test$p.value
}
df$Estimate <- estimates
df$P.value <- pvalues
df

让它更简洁一点。

首先,我猜你的代码中有一个输入错误(如果你想要唯一的值,你应该有
rnorm(5000
),否则你将在这500个数字中循环10次

无论如何,一个简单的方法是:

data <- matrix(rnorm(5000, 10:30, sd=5), nrow = 100, ncol = 50, byrow = TRUE,
               dimnames = list(c(paste("Year", 1:100)),
                               c(paste("Site", 1:50))) )
# Empty data.frame
df <- data.frame(label=paste("Site", 1:50), Estimate="", P.value="")
estimates = numeric(50)
pvalues = numeric(50)
for (i in 1:50){
  test <- cor.test(data[,1], data[,i])
  estimates[i] = test$estimate
  pvalues[i] = test$p.value
}
df$Estimate <- estimates
df$P.value <- pvalues
df

为了让它更简洁一点。

我还可以提供以下内容(屏蔽循环):


result我还可以提供以下内容(屏蔽循环):


结果与colemand77的答案相似:

创建一个cor函数:

cor_fun <- function(x, y, method){
  tmp <- cor.test(x, y, method= method)
  cbind(r=tmp$estimate, p=tmp$p.value) }

与colemand77的答案类似:

创建一个cor函数:

cor_fun <- function(x, y, method){
  tmp <- cor.test(x, y, method= method)
  cbind(r=tmp$estimate, p=tmp$p.value) }

你是对的!它是5000而不是500,但那只是一个随机值的例子。非常感谢你的帮助和建议!你是对的!它是5000而不是500,但那只是一个随机值的例子。非常感谢你的帮助和建议!
t(apply(data, 2, cor_fun, data[, 1], "spearman"))