簡體   English   中英

將行作為參數傳遞給R dplyr mutate中的函數

[英]Passing row as an argument to a function in R dplyr mutate

我正在編寫一個程序,該程序計算數據集的元素與其余元素之間的差異。 我正在使用dplyr mutate,我需要將整行作為參數傳遞給計算差異的函數。 以鳶尾花為例:

#Difference function
diff_func <- function (e1, e2) {
  return(sum(e1-e2))
}

chosenElement <- iris[1,1:4] # Chosen element
elements <- iris[10:50,1:4] # Elements to compare to

elements %>% 
  rowwise() %>% 
  mutate(difference=diff_func(chosenElement, c(Petal.Width, Petal.Length, Sepal.Width, Sepal.Length)))

這可行,但是當我使用整個行時,我想使用“ this”或“ row”之類的東西,而不是指定該行的所有列:

elements %>% 
  rowwise() %>% 
  mutate(difference=diff_func(chosenElement, row))

有誰知道這可以做到嗎?

通過復制selectedElement以使尺寸相同,我們可以在base R非常輕松地完成此操作

elementsNew <- elements - chosenElement[col(elements)]

請注意, mutate用於更改/轉換單列/多列->單列的值。 當然,我們可以將其他類型的對象放在list 假設“差異”應與“ chosenElement”的對應元素對應,並與“ chosenElement”的對應元素對應,則mutate不會使用diff_func

更新

根據說明,似乎我們需要獲取具有對應的selectedElement的列之間的差(此處已復制),然后執行rowSums

elements %>%
        mutate(difference = rowSums(. - chosenElement[col(.)]))

purrr base組合:

do.call(cbind,purrr::map2(elements,chosenElement,function(x,y) x-y))

由於(a - d) + (b - e) + (c - f) == (a + b + c) - (d + e + f) ,因此這只是elements行總和與chosenElements之和之間的chosenElements ,您可以在基數R中執行以下操作:

elements$dfrnce <- rowSums(elements) - sum(chosenElement)

或者,在dplyr

elements %>%
  mutate(dfrnce = rowSums(.) - sum(chosenElement))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM