Mutate_each和变量的相对位置

时间:2017-03-26 20:16:41

标签: r dplyr

我正在尝试创建一组新的变量(使用Dplyr的mutate_each),它将每列表示为左侧列的百分比。

Package path

应该相当于:

FirstSteps/util

我尝试使用像iris <- mutate_each(iris, funs( testvar = . / ?iris[,.-1]?) , 2:4) 这样的表达式来尝试获取每个iris <- mutate(iris, Sepal.Width_testvar = Sepal.Width / Sepal.Length ) iris <- mutate(iris, Petal.Length_testvar = Petal.Length / Sepal.Width ) iris <- mutate(iris, Petal.Width_testvar = Petal.Width / Petal.Length ) 的列号,从而引用左侧的变量。他们都没有成功,因为他们都返回了以下错误:.

1 个答案:

答案 0 :(得分:2)

我们可以在base R中轻松地分割两个大小相等的数据集,其中分子数据集的列为2到4,分母的数据集列为1到3,并将其分配给新的列

iris[paste0(names(iris)[2:4], "_testvar")] <- iris[2:4]/iris[1:3]
head(iris)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Width_testvar Petal.Length_testvar Petal.Width_testvar
#1          5.1         3.5          1.4         0.2  setosa           0.6862745            0.4000000           0.1428571
#2          4.9         3.0          1.4         0.2  setosa           0.6122449            0.4666667           0.1428571
#3          4.7         3.2          1.3         0.2  setosa           0.6808511            0.4062500           0.1538462
#4          4.6         3.1          1.5         0.2  setosa           0.6739130            0.4838710           0.1333333
#5          5.0         3.6          1.4         0.2  setosa           0.7200000            0.3888889           0.1428571
#6          5.4         3.9          1.7         0.4  setosa           0.7222222            0.4358974           0.2352941

或者我们可以使用tidyverse

library(tidyverse)
map2_df(iris[2:4], iris[1:3], `/`) %>%
         setNames(., paste0(names(.), "_testvar")) %>%
         bind_cols(iris, .)