如何根据另一个变量的值使用 dplyr::Distinct
Posted
技术标签:
【中文标题】如何根据另一个变量的值使用 dplyr::Distinct【英文标题】:How to use dplyr::Distinct Based on the Values of Another Variable 【发布时间】:2018-08-12 02:08:33 【问题描述】:library(tidyverse)
使用下面的示例数据,我想根据条件使用 dplyr::distinct()。我想消除 ID 列中的重复项,但只消除“Rate”值最低的重复项。例如,对于“A1A1”,rate 为 2 的行应该被删除,而对于“CC33”,“rate”等于 2 和 3 的行应该被删除。我还想通过使用带有“.keep_all=TRUE”的 dplyr::distinct 来结束所有列。
我尝试了下面的代码,但这会删除主题列。
DF2%>%group_by(ID)%>%summarise(Min_rate=min(Rate))
我也玩过 group_by、mutate 和 if_else,但无法让它工作......
DF2%>%group_by(ID)%>%mutate(if_else(Rate=min(Rate),Rate,distinct(ID)
我们将不胜感激...
样本数据:
ID<-c("A1A1","A22B","CC33","D33D","A1A1","4DD8","4DD8","CC33","CC33","56DK","F4G5","8Y0R")
Subject<-c("Subject1","Subject2","Subject3","Subject4","Subject5","Subject6","Subject7","Subject8","Subject9","Subject10","Subject11","Subject12")
Rate<-c(1,2,3,2,2,3,2,1,2,2,2,3)
DF2<-data_frame(ID,Subject,Rate)
【问题讨论】:
【参考方案1】:我找到了一种方法来完成我想要的事情,首先使用 dplyr 的“group_by”和“mutate”函数以及“if_else”将每个 ID 组中的速率变量的最小值重新编码为 1,以及所有其他值0。
DF2<-DF2%>%group_by(ID)%>%mutate(Rate_Min=if_else(Rate==min(Rate),1,0))
然后我使用 dplyr 的“过滤器”来删除 0。
DF2<-DF2%>%filter(Rate_Min==1)
【讨论】:
以上是关于如何根据另一个变量的值使用 dplyr::Distinct的主要内容,如果未能解决你的问题,请参考以下文章