R 中所有列向量的相关性 (dplyr)
我在 R 中有一个数据框(取自 dplyr 网站 此处)
library(dplyr)
gdf <-
tibble(g = c(1, 1, 2, 3), v1 = 10:13, v2 = 20:23) %>%
group_by(g)
gdf
: :
# A tibble: 4 × 3
# Groups: g [3]
g v1 v2
<dbl> <int> <int>
1 1 10 20
2 1 11 21
3 2 12 22
4 3 13 23
现在我有一个向量:
y <- rnorm(4);y
我想同时测量 y 与 v1 的相关性以及 y 与 v2 的相关性。
across()
函数可能可以完成这项工作
gdf %>% mutate(across(v1:v2, ~ cor(.x,y)))
,但 R 报告我一个错误:
Error: Problem with `mutate()` input `..1`.
ℹ `..1 = across(v1:v2, ~cor(.x, y))`.
x incompatible dimensions
ℹ The error occurred in group 1: g = 1.
Run `rlang::last_error()` to see where the error occurred.
I have a data frame in R (taken from the dplyr's site here):
library(dplyr)
gdf <-
tibble(g = c(1, 1, 2, 3), v1 = 10:13, v2 = 20:23) %>%
group_by(g)
gdf
Resulting to:
# A tibble: 4 × 3
# Groups: g [3]
g v1 v2
<dbl> <int> <int>
1 1 10 20
2 1 11 21
3 2 12 22
4 3 13 23
Now I have a vector :
y <- rnorm(4);y
I want to measure the correlation of y with v1 and the correlation of y with v2 simultaneously.
The across()
function might do the job
gdf %>% mutate(across(v1:v2, ~ cor(.x,y)))
but R reports me an error :
Error: Problem with `mutate()` input `..1`.
ℹ `..1 = across(v1:v2, ~cor(.x, y))`.
x incompatible dimensions
ℹ The error occurred in group 1: g = 1.
Run `rlang::last_error()` to see where the error occurred.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于
cor()
要求x
和y
具有相同的维度,因此您不能将行分组在一起,否则它们将没有 4 个元素可以匹配y
中有 4 个值。准备数据和库
mutate()
如果要在输出中保留
v1
和v2
,请使用.names
参数来指示新的专栏。{.col}
指的是across
正在作用的列名称。summarise()
如果您只想在结果中输出
cor()
,则可以使用summarise
Since
cor()
requires same dimension for bothx
andy
, you cannot group rows together, otherwise, they will not have 4 elements to match with 4 values iny
.Prepare data and library
mutate()
If you want to keep
v1
andv2
in the output, use the.names
argument to indicate the names of the new columns.{.col}
refers to the column name thatacross
is acting on.summarise()
If you only want the
cor()
output in the results, you can usesummarise
使用基本 R:
另一种可能的解决方案,基于 purrr::map_dfc:
Using base R:
Another possible solution, based on
purrr::map_dfc
: