我正在尝试创建一组新的变量(使用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 )
的列号,从而引用左侧的变量。他们都没有成功,因为他们都返回了以下错误:.
。
答案 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, .)