【问题标题】:Find correlation coefficient of two columns in a dataframe by group按组查找数据框中两列的相关系数
【发布时间】:2023-03-29 12:43:02
【问题描述】:

我有一个看起来像这样的大数据框“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 新手,所以不知道如何编写一个聪明的函数来做到这一点。我考虑过重塑数据,但也没有得到任何结果。任何和所有的帮助表示赞赏!

【问题讨论】:

  • 试试 data.table。使用数字作为列名通常也不是好习惯
  • 啊谢谢!找到了解决方案。此外,数字列名称是先前数据重塑的副作用,我认为它们不是好习惯,因为它们太麻烦了。我可能应该编辑问题并输入文本。

标签: r


【解决方案1】:

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)

【讨论】:

  • +1,你可以使用setDT通过引用将datadata.frame转换为data.table
  • 感谢 @Arun 的所有 +1 :) 以及有关 setDT 选项的信息。不知道。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-04-30
  • 2018-07-13
  • 2018-05-19
  • 1970-01-01
  • 2022-08-21
  • 2019-12-26
相关资源
最近更新 更多