首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用3种不同矢量条件对数据帧进行滤波

利用3种不同矢量条件对数据帧进行滤波
EN

Stack Overflow用户
提问于 2017-09-16 04:45:55
回答 2查看 27关注 0票数 0

我的样本数据集

代码语言:javascript
运行
复制
df <- data.frame(period=rep(1:3,3), 
             product=c(rep('A',9)), 
             account= c(rep('1001',3),rep('1002',3),rep('1003',3)),
             findme= c(0,0,0,1,0,1,4,2,0))

我想要的输出数据集

代码语言:javascript
运行
复制
output <- data.frame(period=rep(1:3,2), 
                 product=c(rep('A',6)), 
                 account= c(rep('1002',3),rep('1003',3)),
                 findme= c(1,0,1,4,2,0))

这里我的条件是..。我想消除记录,3记录,从9基于以下条件。

  1. 如果我的所有句点(1、2和3)都满足“findme”值,则等于‘Zero’和
    1. 如果同样的产品发生这种情况
    2. 和同样的账户。

规则1:应满足周期1、2、3规则2:所有期间的查找值=0规则3:所有这3项记录(前1、2、3)应有相同的积规则4:所有这3次重计(周期1、2、3)应有一个帐户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-16 04:57:52

如果我正确理解,如果所有的句点都包含在这个组合中,您希望删除所有来自产品帐户组合的所有记录,其中findme == 0吗?

代码语言:javascript
运行
复制
library(dplyr)

df %>%
  group_by(product, account, findme) %>% 
  mutate(all.periods = all(1:3 %in% period)) %>%
  ungroup() %>%
  filter(!(findme == 0 & all.periods)) %>%
  select(-all.periods)

# A tibble: 6 x 4
  period product account findme
   <int>  <fctr>  <fctr>  <dbl>
1      1       A    1002      1
2      2       A    1002      0
3      3       A    1002      1
4      1       A    1003      4
5      2       A    1003      2
6      3       A    1003      0
票数 2
EN

Stack Overflow用户

发布于 2017-09-16 05:33:19

下面是data.table的一个选项

代码语言:javascript
运行
复制
library(data.table)
setDT(df)[df[, .I[all(1:3 %in% period) & !all(!findme)], .(product, account)]$V1]
#   period product account findme
#1:      1       A    1002      1
#2:      2       A    1002      0
#3:      3       A    1002      1
#4:      1       A    1003      4
#5:      2       A    1003      2
#6:      3       A    1003      0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46250129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档