[英]Calculating correlation in data frame in R
我有一個數據幀d
,它有3列,即s
, n
, id
,我需要根據它們的“id”計算“s”和“n”之間的相關性。 像例如數據框:
"s" "n" "id"
1.6 0.5 2
2.5 0.8 2
4.8 0.7 3
2.6 0.4 3
3.5 0.66 3
1.2 0.1 4
2.5 0.45 4
所以,我想計算2,3和4的相關性,並將其作為矢量返回:
cor
0.18 0.45 0.65
我的問題是如何選擇這些id並計算相關性並以向量的形式返回。
謝謝
這是一個dplyr方法:
library(dplyr)
group_by(df, id) %>% summarise(corel = cor(s, n)) %>% .$corel
#[1] 1.000000 0.875128 1.000000
也許你可以試試
unname(c(by(df[,-3], list(df$id), FUN=function(x) cor(x)[2])))
#[1] 1.000000 0.875128 1.000000
要么
unname(sapply(by(df[,-3], list(df$id), FUN=cor),`[`,2))
#[1] 1.000000 0.875128 1.000000
要么
library(data.table)
setDT(df)[,cor(s,n) , by=id]$V1
#[1] 1.000000 0.875128 1.000000
df <- structure(list(s = c(1.6, 2.5, 4.8, 2.6, 3.5, 1.2, 2.5), n = c(0.5,
0.8, 0.7, 0.4, 0.66, 0.1, 0.45), id = c(2L, 2L, 3L, 3L, 3L, 4L,
4L)), .Names = c("s", "n", "id"), class = "data.frame", row.names = c(NA,
-7L))
tab_split<-split(mydf,mydf$id) # get a list where each element is a subset of your data.frame with the same id
unlist(lapply(tab_split,function(tab) cor(tab[,1],tab[,2]))) # get a vector of correlation coefficients
你給的樣本:
mydf<-structure(list(s = c(1.6, 2.5, 4.8, 2.6, 3.5, 1.2, 2.5),
n = c(0.5,0.8, 0.7, 0.4, 0.66, 0.1, 0.45),
id = c(2L, 2L, 3L, 3L, 3L, 4L,4L)),
.Names = c("s", "n", "id"),
class = "data.frame",
row.names = c(NA, -7L))
> unlist(lapply(tab_split,function(tab) cor(tab[,1],tab[,2])))
2 3 4
1.000000 0.875128 1.000000
注意:如果您的列名稱始終為“n”和“s”,您也可以這樣做
unlist(lapply(tab_split,function(tab) cor(tab$s,tab$n)))
循環選項(即使它可能比其他解決方案慢)。 如果您只想包含某些身份,則應調整矢量d,在矢量v中返回相關性
d <- unique(mydf$id)
v <- vector("numeric", length = length(d))
for(i in seq_along(d)) {
dat <- mydf[ which(mydf$id == d[i]), ]
v[i] <- cor(dat$s, dat$n)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.