问题描述
df <- data.frame(
year = c(2012L,2013L,2014L,2012L,2015L),id = c(1L,1L,2L,2L),col1 = c(11L,13L,16L,15L,16L),col2 = c(10L,14L,12L,11L,17L),col3 = c(17L,19L,21L,12L),)
> df
year id col1 col2 col3
1 2012 1 11 10 17
2 2013 1 13 14 12
3 2014 1 13 12 12
4 2012 2 16 13 14
5 2013 2 15 11 19
6 2014 2 15 16 21
7 2015 2 16 17 12
>
我想在每个列对和所有组中生成一个横截面下三角相关乳胶表,但我希望最终表是所有组的平均值,并且还包括 p 统计数据。 到目前为止,这是我使用 dplyr 所做的:
library(dplyr)
df %>%
group_by(id) %>%
summarize(COR=cor(col1,col2))
但我希望所有列对都有这个,在我的实际数据集中,我有更多的 id。我想使用 xtable、stargazer 或 Hmisc 生成一个乳胶相关表,该表将各组的平均 corr 作为输出,还包括 p 值。我希望我的最终输出看起来像这样:imgur.com/a/7Jwmm8f
解决方法
一个选项是 split
by 'id' 列,然后将 cor
应用于 'col' 列,获取元素 +
并除以 {{1} } of length
'id' 并将 unique
值替换为 upper.tri
NA
-输出
out <- Reduce(`+`,lapply(split(df[3:5],df$id),function(x) cor(x,use = "complete.obs")))/length(unique(df$id))
out[upper.tri(out)] <- NA
或者使用 out
# col1 col2 col3
#col1 1.0000000 NA NA
#col2 0.5902554 1.000000 NA
#col3 -0.9807620 -0.569806 1
tidyverse