我有以下数据
df <- tibble(a = rnorm(10,0,1), b = a+6, c = b/2)
df %>% mutate_at(vars(a, b), scale) %>% GGally::ggpairs()
这返回了错误
错误:列
a
必须是1d原子向量或列表
进一步挖掘表明str()
已更改为mutate_at()
。
> df %>% mutate_at(vars(a, b), scale) %>% str
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 10 obs. of 3 variables:
$ a: num [1:10, 1] -1.274 -0.81 0.362 1.374 1.06 ...
..- attr(*, "scaled:center")= num 0.106
..- attr(*, "scaled:scale")= num 0.813
$ b: num [1:10, 1] -1.274 -0.81 0.362 1.374 1.06 ...
..- attr(*, "scaled:center")= num 6.11
..- attr(*, "scaled:scale")= num 0.813
$ c: num 2.54 2.72 3.2 3.61 3.48 ...
通过df
更改变量后,如何使用mutate_at()
?例如,如何将GGally::ggcoef
与我的缩放数据一起使用?
答案 0 :(得分:5)
scale()
函数会为向量添加额外的属性,以便以后可以取消对矢量的缩放。但这似乎让ggpairs
不再认为它是一个数字向量。您可以创建自己的包装器来清理额外的属性
simple_scale <- function(...) as.numeric(scale(...))
然后你可以做
df %>% mutate_at(vars(a, b), simple_scale) %>% GGally::ggpairs()