r - 如何计算数据帧的一行和剩余行之间的相关性

标签 r

我有这样的数据

 name  col1  col2  col3
1    a 43.78 43.80 43.14
2    b 43.84 43.40 42.85
3    c 37.92 37.64 37.54
4    d 31.72 31.62 31.74

我们称之为 df

df<-structure(list(name = structure(1:4, .Label = c("a", "b", "c", 
"d"), class = "factor"), col1 = c(43.78, 43.84, 37.92, 31.72), 
    col2 = c(43.8, 43.4, 37.64, 31.62), col3 = c(43.14, 42.85, 
    37.54, 31.74)), class = "data.frame", row.names = c(NA, -4L
))

现在我想计算第 d 行和其他行之间的 R2 和调整后的 R2

如果我想查看所有组合,我可以执行以下相关操作

out <- cor(t(df[, -1]))
out[upper.tri(out, diag = TRUE)] <- NA
rownames(out) <- colnames(out) <- df$name
out <- na.omit(reshape::melt(t(out)))
out <- out[ order(out$X1, out$X2), ]

这给了我这个

   X1 X2      value
5   a  b  0.8841255
9   a  c  0.6842705
13  a  d -0.6491118
10  b  c  0.9457125
14  b  d -0.2184630
15  c  d  0.1105508

但我只想要在 d 行和其余行之间,并且我想要同时具有相关系数和调整后的 R2

最佳答案

如果先转置数据框会更容易。之后使用 purrr::mapbroom::tidy 完成工作

library(tidyverse)

df <- structure(list(name = structure(1:4, .Label = c("a", "b", "c", 
"d"), class = "factor"), col1 = c(43.78, 43.84, 37.92, 31.72), 
    col2 = c(43.8, 43.4, 37.64, 31.62), col3 = c(43.14, 42.85, 
    37.54, 31.74)), class = "data.frame", row.names = c(NA, -4L
))

# transpose df
df_transpose <- df %>% 
  gather(variable, value, -name) %>% 
  spread(name, value) %>% 
  select(-variable)

# loop through columns, apply `cor` vs 'd' column
colnames(df_transpose) %>%
  set_names() %>% 
  map(~ cor(df_transpose[, .x], df_transpose[, 'd'])) %>%
  map_dfr(., broom::tidy, .id = "var")

#> # A tibble: 4 x 2
#>   var        x
#>   <chr>  <dbl>
#> 1 a     -0.649
#> 2 b     -0.218
#> 3 c      0.111
#> 4 d      1

reprex package于2019年3月15日创建(v0.2.1.9000)

关于r - 如何计算数据帧的一行和剩余行之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192714/

相关文章:

r - 抑制R中的错误消息

r - 使用 $ 和字符值动态选择数据框列

c++ - 引用其他对象作为引用类字段

r - 选择一列中给定值的数据框的一半

r - 当长度变化时生成所有排列

r - 在for循环中存储具有多个条件的变量,直到在R中满足条件

r - 多项式密度函数适用于非整数数据?

r - 小数字的 Y 轴缩放问题

将数字向下舍入

r - 如何更改 ggplot2 中分类变量的 x 轴大小?