如何根据另一个变量的值使用 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的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一个变量设置变量的值?

如何根据另一个变量的行上的值添加一定数量的行

如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?

如何在颤动中更改另一个类中变量的值

在 R 中使用 dplyr::if_else() 根据另一个变量的值更改 POSIXct 时间戳的时区

如何使用来自另一个变量的滞后位置获取变量的值?