web-dev-qa-db-ja.com

mutate_allを使用して選択された列ですべての列を分割します

私はこのようなサンプルデータフレームを持っています(私の完全なデータフレームには "d"と57要素があります)。

d <- seq(0, 100, 0.5) 
Fe <- runif(201, min = 0, max = 1000) 
Ca <- runif(201, min = 0, max = 1000) 
Zr <- runif(201, min = 0, max = 1000) 
Ti <- runif(201, min = 0, max = 1000) 
Al <- runif(201, min = 0, max = 1000) 
example <- data.frame(d, Fe, Ca, Zr, Ti, Al)
Ratio_Elements <- c("Fe", "Ti", "Zr", "d") #this subset of the 
dataframe is user defined
Detrital_Divisor <- "Zr"
 _

Detrital_divisorはユーザー入力に基づいて変更できますが、常に「例」データフレームの列になります。残りのすべての列をDetrital_Divisorコラムで、好ましくはパイプを使用して分割したいと思います。今私は持っています:

Example_Ratio <- example %>%
select (Ratio_Elements) #to subset to the user selected elements
mutate_all(./Detrital_Divisor)
 _

しかし、私はエラーを受けます:

Error in Ops.data.frame(., Detrital_Divisor) : 
  ‘/’ only defined for equally-sized data frames.
 _

私も試してみました:

Example_Ratio <- example %>%
select (Ratio_Elements)
sweep(., Detrital_Divisor, MARGIN = 1, '/')
 _

このフォーラムで尋ねられた類似の質問に基づいていますが、私はそれを働かせることはできません。私は誤りを得る

    `Error in Ops.data.frame(x, aperm(array(STATS, dims[perm]), order(perm)),  : 
  list of length 206340 not meaningful.`
 _

私はこの質問がやや反復的であることを知っていますが、私が見つけた他の答えは私の状況で働いていません。私のデータフレーム全体には57の要素があるので、各列を個別に分割するためのコードを書くことは非常に長くなるでしょう。

あらゆるアドバイスのために事前にありがとう。

7
JJGabe

@ arg0naut91による回答を更新する(dplyr 1.0.0)

Example_Ratio <- example %>% 
  mutate(across(everything()), . / Zr) %>% 
  select(Ratio_Elements)
 _
1
Chris