【发布时间】:2018-03-01 17:48:07
【问题描述】:
我有一个如下数据集:
复制数据集的R代码:
mydata <- data.frame(Name =c('Alex','Brenda','Carl','Alex','Daniel',
'Einstein','Frodo','Alex','Brenda','Carl','Einstein','Frodo'),
Product_Name = c('A','A','A','A','A','A','A','B','B','B','B','B'),
Use = c(0,0,0,1,1,1,1,0,0,1,1,1))
mydata
这是来自产品使用情况调查的数据集。 Name 包含用户姓名,Product_Name 为产品名称(Product A 或 Product B。在真实数据集中,有2个以上),Use 包含用户是否使用该产品的信息(1 = 是,0 = 否)。
不幸的是,有些人对有关他们是否使用产品的问题选择了“是”和“否”。我想删除这些人,但只删除有问题的 Product_Name。在示例中,用户 Alex 对产品 A 回答是和否:
我想删除此类个人,但我只想删除相关产品。在这里,我只想为产品 A 删除 Alex,为产品 B 保留 Alex。这应该是我希望数据集的样子:
我知道我可以使用 R (https://stat.ethz.ch/R-manual/R-devel/library/base/html/unique.html) 中的唯一包删除重复项,但这仍然会在产品 1 中留下一个 Alex 的情况。我还想限制在每个 Product_Name 中搜索唯一名称(即. 只有产品 A 或产品 B 等等)。任何帮助将不胜感激。
如果问题不是很清楚,请告诉我。提前致谢。
跟进问题
现在假设我们有以下场景:
mydata <- data.frame(Name =c('Alex','Brenda','Carl','Alex','Daniel',
'Einstein','Frodo','Alex','Brenda','Carl','Einstein','Frodo',
'Mary','Mary','Richard','Richard'),
Product_Name = c('A','A','A','A','A','A','A','B','B','B','B',
'B','C','C','C','C'),
Use = c(0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1))
除了上面的条件,如果一个人有 use =0 和 use = 1 然后他们被删除我还有一个附加条件。如果 Use = 0 并且我们看到同一用户的多个条目,那么我们不会删除观察结果。但是,如果 Use = 1 并且我们看到同一用户的多个实例,则我们将其删除。例如,在下图中,我想保留 Mary 的观察结果并删除 Richard 的观察结果。
我希望得到的最终输出如下所示:
在此图中,请注意我不想删除 Mary,因为这两个实例都使用 =0。但是由于 Richard 的 Use = 1,我想删除他的观察结果。
【问题讨论】:
-
您应该研究按变量分组。例如,您可以使用 dplyr:
group_by(mydata, Name, Product_Name) %>% filter(n() == 1) -
mydata[with(mydata, ave(Use, Name, Product_Name)) %in% 0:1, ]
标签: r unique data-cleaning