按 R 中变量的级别相关
Correlate by levels of a variable in R
我想关联两个变量,并针对第三个变量的水平分别报告输出。
我的数据类似于这个例子:
var1 <- c(7, 8, 9, 10, 11, 12)
var2 <- c(18, 17, 16, 15, 14, 13)
categories <- c(1, 2, 3, 1, 2, 3)
并且我想将类别中的 var1 与 var2 相关联,这样结果将显示类别 1 的 var1 和 var2 的值与类别 2 和类别 3 的相关性。
在 SAS 中,我会这样做:
PROC CORR DATA=x;
BY CATEGORY
VAR VAR1
WITH VAR2;
RUN;
您可以将记录放入 data.frame,然后按类别拆分,然后 运行 每个类别的相关性。
sapply(
split(data.frame(var1, var2), categories),
function(x) cor(x[[1]],x[[2]])
)
使用 dplyr
库
这看起来会更漂亮
library(dplyr)
data.frame(var1=var1, var2=var2, categories=categories) %>%
group_by(categories) %>%
summarize(cor= cor(var1, var2))
您也可以使用 by
sapply(by(cbind(var1, var2), categories, FUN=cor),`[`,2)
#1 2 3
#-1 -1 -1
我想关联两个变量,并针对第三个变量的水平分别报告输出。
我的数据类似于这个例子:
var1 <- c(7, 8, 9, 10, 11, 12)
var2 <- c(18, 17, 16, 15, 14, 13)
categories <- c(1, 2, 3, 1, 2, 3)
并且我想将类别中的 var1 与 var2 相关联,这样结果将显示类别 1 的 var1 和 var2 的值与类别 2 和类别 3 的相关性。
在 SAS 中,我会这样做:
PROC CORR DATA=x;
BY CATEGORY
VAR VAR1
WITH VAR2;
RUN;
您可以将记录放入 data.frame,然后按类别拆分,然后 运行 每个类别的相关性。
sapply(
split(data.frame(var1, var2), categories),
function(x) cor(x[[1]],x[[2]])
)
使用 dplyr
库
library(dplyr)
data.frame(var1=var1, var2=var2, categories=categories) %>%
group_by(categories) %>%
summarize(cor= cor(var1, var2))
您也可以使用 by
sapply(by(cbind(var1, var2), categories, FUN=cor),`[`,2)
#1 2 3
#-1 -1 -1