簡體   English   中英

列子集上的dplyr mutate(所有這些列上的一個函數組合)

[英]dplyr mutate on column subset (one function on all these columns combined)

我有一個包含一些信息和一些測量的數據框。 對於測量,我想計算馬哈拉諾比斯距離,但我沒有達到干凈的dplyr方法。 我希望有類似的東西:

library(anomalyDetection)

test<-data.frame(id=LETTERS[1:10],
                 A = rnorm(10,0,2),
                 B = rnorm(10,5,3))

test<-test%>%
  mutate(MD = mahalanobis_distance(.%>%dplyr::select(one_of(c("A","B")))))

我知道以下工作:

test<-test%>%
  mutate(MD = mahalanobis_distance(test%>%dplyr::select(one_of(c("A","B")))))

但如果在mutate-calls之前還有其他步驟,則會發生故障:

test<-test%>%
  mutate(group = id %in% c(LETTERS[1:5]))%>%
  group_by(group)%>%
  mutate(MD = mahalanobis_distance(test%>%dplyr::select(one_of(c("A","B")))))

我們可以做一個split基於邏輯載體,然后用map_df通過應用創建的“MD”列mahalanobis_distance在分割數據集

library(purrr)
library(dplyr)
library(anomalyDetection)

test %>%
    split(.$id %in% LETTERS[1:5]) %>%  
    map_df(~mutate(., MD = mahalanobis_distance(.[-1])))
#  id          A          B        MD
#1   F -0.7829759 4.22808758 2.9007659
#2   G  2.4246532 5.96043439 1.3520245
#3   H -4.8649537 4.95510794 3.0842137
#4   I  1.2221836 5.36154775 0.2921482
#5   J  0.6995204 5.63616864 0.3708477
#6   A  1.2374543 5.17288708 1.4382259
#7   B -2.7815555 0.06437452 2.1244313
#8   C -2.2160242 2.74747556 0.5088291
#9   D  0.8561507 2.70631852 1.5174367
#10  E -1.6427978 6.23758354 2.4110771

注意:在OP的帖子中創建數據集時沒有設置種子

暫無
暫無

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

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