首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用dplyr按单个列缩放data.frame中的列

如何使用dplyr按单个列缩放data.frame中的列
EN

Stack Overflow用户
提问于 2020-12-03 19:14:28
回答 2查看 101关注 0票数 0

我有以下data.frame:

代码语言:javascript
复制
dat <- data.frame(bifpar = c(0.5, 0.75, 1.0), sd_distfeed = rep(2,3), sd_nodist = rep(3,3), mean_distfeed = rep(10,3), mean_nodist = rep(20,3))
dat

bifpar sd_distfeed sd_nodist mean_distfeed mean_nodist
1   0.50           2         3            10          20
2   0.75           2         3            10          20
3   1.00           2         3            10          20

代码语言:javascript
复制
library('tidyverse')

dat %>%
  mutate_at(vars(matches("dist")), ~ (. / mean_nodist))

  bifpar sd_distfeed sd_nodist mean_distfeed mean_nodist
1   0.50         0.1      0.15           0.5           1
2   0.75         0.1      0.15           0.5           1
3   1.00         0.1      0.15           0.5           1

它工作得很好,但如果我按列mean_distfeed缩放,则不会缩放右侧的列:

代码语言:javascript
复制
dat %>%
  mutate_at(vars(matches("dist")), ~ (. / mean_distfeed))

bifpar sd_distfeed sd_nodist mean_distfeed mean_nodist
1   0.50         0.2       0.3             1          20
2   0.75         0.2       0.3             1          20
3   1.00         0.2       0.3             1          20

如何按单个列缩放选定的列,而与其在data.frame中的位置无关?

我使用的是R版本4.0.2和tidyverse版本1.3.0

EN

回答 2

Stack Overflow用户

发布于 2020-12-03 19:56:06

我现在找不到任何与此相关的文档、github问题或stackoverflow答案(但我在某个地方看到过)。

无论如何,原因是mutate_at使用更新的mean_distfeed值来划分mean_nodist

对于此操作:

代码语言:javascript
复制
library(dplyr)

dat %>% mutate_at(vars(matches("dist")), ~ (. / mean_distfeed))

以第一行为例,计算如下:

代码语言:javascript
复制
sd_distfeed - 2/10
sd_nodist - 3/10
mean_distfeed - 10/10

请注意,由于10/10,mean_distfeed值现在已更新为1。因此,对于下一列,将发生以下情况-

代码语言:javascript
复制
mean_nodist - 20/1

因此,您将获得相同的值。

解决方案是保持列在最后划分,以避免这种情况发生。然而,正如其他人所指出的那样,这个错误已经在across中修复了。

票数 1
EN

Stack Overflow用户

发布于 2020-12-03 19:28:57

mutate_at已被取代。请尝试改用mutate(across(...语法:

代码语言:javascript
复制
dat %>% mutate(across(contains("dist"), ~ . / mean_distfeed))
#>   bifpar sd_distfeed sd_nodist mean_distfeed mean_nodist
#> 1   0.50         0.2       0.3             1           2
#> 2   0.75         0.2       0.3             1           2
#> 3   1.00         0.2       0.3             1           2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65124898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档