2017-03-26 15 views
1

私は、各列をその左側の列のパーセンテージとして表現する新しい変数セット(Dplyrのmutate_eachを使用)を作成しようとしています。私はiris[, which(names(iris)== .)-1]などの各.使用した式の列番号を取得しようとすることで左に変数を参照しようとしたMutate_eachと変数の相対位置

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) 

iris <- mutate_each(iris, funs(testvar = ./?iris[,.-1]?) , 2:4) 

は同等であるべきです。次のエラーが返されたため、いずれも成功しませんでした: Error in mutate_impl(.data, dots) : wrong result size (0), expected 150 or 1

答えて

2

は、我々は2つの等しいサイズのデータ​​セットを分割しbase Rで簡単に行うことができる場合、データセットの列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 

に割り当て有する分子列2~4とデータセット、および分母

または使用可能tidyverse

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