dplyr 中 mutate_all 函数的问题
Problem with mutate_all function in dplyr
我不确定这是否是一个愚蠢的问题,但我现在需要提示。提前致歉。
所以我有一个随机数据帧 df,我想使用 mutate_at()
函数。
x1<-rpois(20,5)
x2<-rpois(20,5)
x3<-rpois(20,2)
df1<-data.frame(x1,x2,x3)
如果我像这样将整个数据帧除以一列,这项工作非常好:
library(dplyr)
df1%>%mutate_at(vars(x1:x3),list(All_by_x3=~./x3))
但我真正想要的是 x3
除以数据框的每一列。所以我想要 x3
作为分子并循环遍历分母中的不同列。我逻辑上尝试的是:
df1%>%mutate_at(vars(x1:x3),list(All_by_x3= x3/ ~.))
但它不起作用。
感觉好像有简单的答案,但是我看不到。
感谢您的帮助。
可能的解决方案,基于dplyr
:
library(dplyr)
df1 %>%
mutate(across(x1:x2, ~ x3/.x, .names = "x3_{.col}"))
#> x1 x2 x3 x3_x1 x3_x2
#> 1 2 4 1 0.5000000 0.25000000
#> 2 7 3 2 0.2857143 0.66666667
#> 3 8 11 1 0.1250000 0.09090909
#> 4 7 4 2 0.2857143 0.50000000
#> 5 3 7 0 0.0000000 0.00000000
#> 6 6 6 3 0.5000000 0.50000000
#> 7 2 7 2 1.0000000 0.28571429
#> 8 7 6 1 0.1428571 0.16666667
#> 9 1 5 0 0.0000000 0.00000000
#> 10 4 7 6 1.5000000 0.85714286
#> 11 3 4 2 0.6666667 0.50000000
#> 12 4 3 2 0.5000000 0.66666667
#> 13 2 1 2 1.0000000 2.00000000
#> 14 2 4 0 0.0000000 0.00000000
#> 15 6 4 1 0.1666667 0.25000000
#> 16 5 5 4 0.8000000 0.80000000
#> 17 7 5 6 0.8571429 1.20000000
#> 18 5 4 3 0.6000000 0.75000000
#> 19 6 5 3 0.5000000 0.60000000
#> 20 5 3 1 0.2000000 0.33333333
我不确定这是否是一个愚蠢的问题,但我现在需要提示。提前致歉。
所以我有一个随机数据帧 df,我想使用 mutate_at()
函数。
x1<-rpois(20,5)
x2<-rpois(20,5)
x3<-rpois(20,2)
df1<-data.frame(x1,x2,x3)
如果我像这样将整个数据帧除以一列,这项工作非常好:
library(dplyr)
df1%>%mutate_at(vars(x1:x3),list(All_by_x3=~./x3))
但我真正想要的是 x3
除以数据框的每一列。所以我想要 x3
作为分子并循环遍历分母中的不同列。我逻辑上尝试的是:
df1%>%mutate_at(vars(x1:x3),list(All_by_x3= x3/ ~.))
但它不起作用。 感觉好像有简单的答案,但是我看不到。
感谢您的帮助。
可能的解决方案,基于dplyr
:
library(dplyr)
df1 %>%
mutate(across(x1:x2, ~ x3/.x, .names = "x3_{.col}"))
#> x1 x2 x3 x3_x1 x3_x2
#> 1 2 4 1 0.5000000 0.25000000
#> 2 7 3 2 0.2857143 0.66666667
#> 3 8 11 1 0.1250000 0.09090909
#> 4 7 4 2 0.2857143 0.50000000
#> 5 3 7 0 0.0000000 0.00000000
#> 6 6 6 3 0.5000000 0.50000000
#> 7 2 7 2 1.0000000 0.28571429
#> 8 7 6 1 0.1428571 0.16666667
#> 9 1 5 0 0.0000000 0.00000000
#> 10 4 7 6 1.5000000 0.85714286
#> 11 3 4 2 0.6666667 0.50000000
#> 12 4 3 2 0.5000000 0.66666667
#> 13 2 1 2 1.0000000 2.00000000
#> 14 2 4 0 0.0000000 0.00000000
#> 15 6 4 1 0.1666667 0.25000000
#> 16 5 5 4 0.8000000 0.80000000
#> 17 7 5 6 0.8571429 1.20000000
#> 18 5 4 3 0.6000000 0.75000000
#> 19 6 5 3 0.5000000 0.60000000
#> 20 5 3 1 0.2000000 0.33333333