【发布时间】:2020-07-16 09:35:07
【问题描述】:
[2020 年 4 月 4 日编辑] 这是我在 stackoverflow 上的第一篇文章,我是新的 R 用户。请原谅我的任何错误。 我将 R 3.6.2 与 Rstudio 一起使用。 在这个数据集中,我希望找到一种方法来在一年的每个季度中保留唯一的 ID 案例。许多人在同一季度服用多种药物,我想知道每个季度谁服用了任何药物。所以每年每个季度都有唯一的 ID。
> Df<-data.frame(ID= c("123", "456", "123", "789", "123", "456", "789", "123", "789"),
+ Drug= c("A", "B", "C", "A", "A", "A", "B", "B", "A"),
+ Administered= c("2017 Q1", "2018 Q1", "2017 Q3", "2017 Q1", "2017 Q1", "2018 Q3", "2018 Q1", "2017 Q1", "2018 Q1"))
>
> dput(Df) ##Generating dput format
structure(list(ID = structure(c(1L, 2L, 1L, 3L, 1L, 2L, 3L, 1L,
3L), .Label = c("123", "456", "789"), class = "factor"), Drug = structure(c(1L,
2L, 3L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("A", "B", "C"), class = "factor"),
Administered = structure(c(1L, 3L, 2L, 1L, 1L, 4L, 3L, 1L,
3L), .Label = c("2017 Q1", "2017 Q3", "2018 Q1", "2018 Q3"
), class = "factor")), class = "data.frame", row.names = c(NA,
-9L))
>
> str(Df) ##demonstrating structure of data
'data.frame': 9 obs. of 3 variables:
$ ID : Factor w/ 3 levels "123","456","789": 1 2 1 3 1 2 3 1 3
$ Drug : Factor w/ 3 levels "A","B","C": 1 2 3 1 1 1 2 2 1
$ Administered: Factor w/ 4 levels "2017 Q1","2017 Q3",..: 1 3 2 1 1 4 3 1 3
>
> print(Df) ##Before removing duplicates
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 123 C 2017 Q3
4 789 A 2017 Q1
5 123 A 2017 Q1
6 456 A 2018 Q3
7 789 B 2018 Q1
8 123 B 2017 Q1
9 789 A 2018 Q1
>
> library(tidyverse) ##Loading tidyverse for distinct function to remove duplicates
>
> Df %>% distinct(ID, .keep_all=TRUE) ##Removed duplicate enteries but wanted to remove duplicates IDs within each Year Quarter
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 789 A 2017 Q1
>
> ##Generating the end result dataset desired where only duplicate ID's within each quarter are removed
> dfend<-data.frame(ID= c("123", "456", "123", "789", "456", "789"),
+ Drug= c("A", "B", "C", "A", "A", "B"),
+ Administered= c("2017 Q1", "2018 Q1", "2017 Q3", "2017 Q1", "2018 Q3", "2018 Q1"))
>
> print(dfend)
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 123 C 2017 Q3
4 789 A 2017 Q1
5 456 A 2018 Q3
6 789 B 2018 Q1
所以您可以看到,当我使用重复功能时,它会删除所有重复的 ID,而我只想在一年的同一季度内删除重复的 ID。 我在 'dfend' 数据框中提供了我想要的输出,其中案例 5、8 和 9 已被删除,因为它们是同一季度内的重复 ID。 该数据是我根据我的原始数据集创建的样本,该数据集具有 >1500 个条目。我希望能够应用一个函数来在大型数据集中实现这样的结果。我希望这个编辑能更好地解释我在寻找什么。抱歉之前的帖子,慢慢学习。
谢谢!
【问题讨论】:
-
图片是一种非常糟糕的发布数据(或代码)的方式。您可以以
dput格式发布示例数据吗?请使用您尝试过的代码和dput(df)的输出来编辑问题。或者,如果dput(head(df, 20))的输出太大。 (df是数据集的名称。) -
您可以编辑您的问题以回复 cmets。
-
嗨,斯兰曼。请显示您的代码,至少是一个 sn-p。对我来说,作为一个读者,代码是我首先要寻找的东西。谢谢。
-
@RonakShah 预期输出是本次编辑中的 dfend 数据集。
-
@RuiBarradas 我已经发布了生成示例数据帧的代码,并在此编辑中提供了 dput(df) 结果。