我有一个大型数据框" Im"看起来像这样
V1 V7 X134 X135 X136 X137 X138
1 m 1000 543.360 1057.770 1869.42 2664.06 3935.307
2 m 2000 767.256 1704.430 2993.63 5248.06 6341.129
3 m 3000 413.096 796.168 1441.13 3500.46 2962.048
4 a 4000 257.128 559.200 1014.79 2948.64 2080.437
5 a 5000 188.504 440.640 813.60 2538.11 1639.349
6 a 6000 483.704 921.064 1679.98 3626.44 3426.709
....
我想找到列X135和所有其他编号列之间的相关系数,换句话说,我基本上需要这个
> cor(Im$X135,Im$X136)
> cor(Im$X135,Im$X134)
> cor(Im$X135,Im$X137)
问题是我需要按" V1"分组的相关性。我正在寻找的输出应该是这样的(使用假设的相关系数)
V1 cc134 cc136 cc137
1 m 0.92 0.99 0.95
1 a 0.99 0.93 0.89
我已经看过tapply,ddply,aggregate和我发现的所有内容都是行和函数,如sum和average,导致输出具有相同的列。我是R的新手,所以无法弄清楚如何编写一个聪明的函数来做到这一点。我考虑过重新整理数据,但也没有得到任何结果。任何和所有帮助表示赞赏!
答案 0 :(得分:2)
此类问题最适合data.table
包。
这是一个简单的尝试:
library(data.table)
data <- read.table(text=" V1 V7 134 135 136 137 138
1 m 1000 543.360 1057.770 1869.42 2664.06 3935.307
2 m 2000 767.256 1704.430 2993.63 5248.06 6341.129
3 m 3000 413.096 796.168 1441.13 3500.46 2962.048
4 a 4000 257.128 559.200 1014.79 2948.64 2080.437
5 a 5000 188.504 440.640 813.60 2538.11 1639.349
6 a 6000 483.704 921.064 1679.98 3626.44 3426.709",header=T)
data <- data.table(data)
setkey(data,V1)
data[,list(cc134=cor(X135,X134),cc136=cor(X135,X136),cc137=cor(X135,X137)),by=key(data)]
要了解有关该套餐的更多信息:
vignette("datatable-intro")
vignette("datatable-faq")
vignette("datatable-timings")
或者看到它的实际效果:
example(data.table)