簡體   English   中英

將估計值和p值輸入數據框

[英]Getting estimate and p-value into dataframe

我對R相當陌生。我的數據看起來像這樣(僅包含9000列和66行)

Time <- c(0, 6.4, 8.6, 15.2, 19.4, 28.1, 42.6, 73, 73, 85, 88, 88, 88, 88, 88)
ID1 <- c(55030, 54539, 54937, 48897, 58160, 54686, 55393, 47191, 39805, 37601, 51328, 28882, 45587, 60061, 31892, 28670)
ID2 <- c(20485, 11907, 10571, 20974, 10462, 11149, 20970, NA, NA, 9295, NA, 8714, 24446, 10748, 9037, 11859)
ID3 <- c(93914, 44482, 43705, 51144, 49485, 43908, 44324, 37342, 18872, 39660,61673, 43837, 36528, 44738, 41648, 11100)
DF <- data.frame (Time, ID1, ID2, ID3)

我想要一個看起來像這樣的數據框:

ID1,Rho,p值

ID2,Rho,p值

...

rho和p值是帶有時間和每個ID的cor.test(長矛手)的結果

我嘗試過的其他方法之一:

results <- data.frame(ID="", Estimate="", P.value="")
estimates = numeric(16)
pvalues = numeric(16)
for (i in 2:4){
  test <- cor.test(DF[,1], DF[,i])
  estimates[i] = test$estimate
  pvalues[i] = test$p.value
}

R給了我以下錯誤:

Error: object 'test' not found

我也嘗試過:

result <- do.call(rbind,lapply(2:4, function(x) {
  cor.result<-cor.test(DF[,1],DF[,x])
  pvalue <- cor.result$p.value
  estimate <- cor.result$estimate
  return(data.frame(pvalue = pvalue, estimate = estimate))
})
)

R給了我一個類似的錯誤

Error: object 'cor.result' not found

我敢肯定這是一個簡單的解決方法,但似乎無法解決。 任何幫助都超過了歡迎。

這是我跑步后得到的

dput(head(SmallDataset[,1:5]))

structure(list(Species = c("Human.hsapiens", "Chimpanzee.ptroglodytes", 
"Gorilla.ggorilla", "Orangutan.pabelii", "Gibbon.nleucogenys", 
"Macaque.mmulatta"), Time = c(0, 6.4, 8.61, 15.2, 19.43, 28.1
), ID1 = c(55030, 54539, 54937, 48897, 58160, 54686), ID2 = c(20485, 
11907, 10571, 20974, 10462, 11149), ID3 = c(93914, 44482, 43705, 
51144, 49485, 43908)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

我的解決方案涉及在lapply調用中定義一個函數

##
library(dplyr)

###Create dataframe
Time <- c(0, 6.4, 8.6, 15.2, 19.4, 28.1, 42.6, 73, 73, 85, 88, 88, 88, 88, 88, 89)
ID1 <- c(55030, 54539, 54937, 48897, 58160, 54686, 55393, 47191, 39805, 37601, 51328, 28882, 45587, 60061, 31892, 28670)
ID2 <- c(20485, 11907, 10571, 20974, 10462, 11149, 20970, NA, NA, 9295, NA, 8714, 24446, 10748, 9037, 11859)
ID3 <- c(93914, 44482, 43705, 51144, 49485, 43908, 44324, 37342, 18872, 39660,61673, 43837, 36528, 44738, 41648, 11100)
DF <- data.frame (Time, ID1, ID2, ID3)

##Run the correlations
l2 <- lapply(2:4, function(i)cor.test(DF$Time, DF[,i]))

##Define function to extract p_value and coefficients
l3 <- lapply(l2, function(i){
  return(tibble(estimate = i$estimate,
         p_value = i$p.value))
})

##Create a dataframe with information
l4 <- bind_rows(l3) %>% mutate(ID = paste0("ID", 1:3)) ##Data frame with info

l4

考慮構建一個不那么lapply的數據幀列表(一個迭代函數類似於for但是建立一個長度相等的對象列表作為輸入)。 然后,將所有數據框元素行綁定在一起:

results <- lapply(2:4, function(i){      
  test <- cor.test(DF[,1], DF[,i])

  data.frame(ID = names(DF)[i],
             estimate =  unname(test$estimate),
             pvalues = unname(test$p.value))      
})

final_df <- do.call(rbind, results)
final_df

#    ID   estimate     pvalues
# 1 ID1 -0.6238591 0.009805341
# 2 ID2 -0.2270515 0.455676037
# 3 ID3 -0.4964092 0.050481533

注意:您為時間發布的數據缺少觀察值,因此無法立即與其他向量一起轉換為data.frame() 為了解決這個問題,我在結尾處補充了第六名88:

Time <- c(0, 6.4, 8.6, 15.2, 19.4, 28.1, 42.6, 73, 73, 85, 88, 88, 88, 88, 88, 88)

使用發布的SmallDataset:

SmallDataset <- structure(...)

results <- lapply(3:5, function(i){      
  test <- cor.test(SmallDataset$Time, SmallDataset[,i])

  data.frame(ID = names(SmallDataset)[i],
             estimate =  unname(test$estimate),
             pvalues = unname(test$p.value))      
})

final_df <- do.call(rbind, results)
final_df

#    ID    estimate   pvalues
# 1 ID1  0.03251407 0.9512461
# 2 ID2 -0.41733336 0.4103428
# 3 ID3 -0.60732484 0.2010166

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM