Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据开始日期和值的组合筛选某些ID变量_R_Dplyr - Fatal编程技术网

R 根据开始日期和值的组合筛选某些ID变量

R 根据开始日期和值的组合筛选某些ID变量,r,dplyr,R,Dplyr,我试图根据某一天的市值来过滤这个例子。例如,我正试图删除股票BBB,因为它是2018年4月11日唯一市值超过1500的股票。但如果市值增长超过1500点,比如AAA和DDD,股票可以留在数据框架内。我试过dplyr,但找不到这样做的组合 您可以使用分组的过滤器来执行此操作。关键是要认识到这一点。为了理解为什么,考虑在结尾给出可得到相同结果的可比较代码。我们只需要看看对于每只股票,行中的任何一行都有一个特定的日期和一个过高的市值。 df% 集团(股票)%>% 过滤器(!any(市值>1500&日

我试图根据某一天的市值来过滤这个例子。例如,我正试图删除股票BBB,因为它是2018年4月11日唯一市值超过1500的股票。但如果市值增长超过1500点,比如AAA和DDD,股票可以留在数据框架内。我试过dplyr,但找不到这样做的组合

您可以使用分组的
过滤器来执行此操作。关键是要认识到这一点。为了理解为什么,考虑在结尾给出可得到相同结果的可比较代码。我们只需要看看对于每只股票,
行中的任何一行都有一个特定的日期和一个过高的市值。

df%
集团(股票)%>%
过滤器(!any(市值>1500&日期==截止日期(“2018-04-11”))
#>#tibble:9 x 4
#>#群体:股票[3]
#>股票日期价格市场
#>               
#>1 AAA 2018-04-11 5 1000
#>2 AAA 2018-04-12 6 1300
#>3 AAA 2018-04-13 7 1600
#>4 CCC 2018-04-11 6 600
#>5 CCC 2018-04-12 6 600
#>6 CCC 2018-04-13 6 600
#>7 DDD 2018-04-11 10400
#>8 DDD 2018-04-12 30 1000
#>9 DDD 2018-04-13 50 2000
df%>%
集团(股票)%>%
变异(保留=!任何(市值>1500&日期==截止日期(“2018-04-11”))%>%
过滤器(保持==TRUE)
由(v0.2.0)于2018年7月20日创建。

编辑:如果OP仅针对特定日期进行筛选,且最后一列的值大于1500,则以下内容可能会有所帮助

structure(list(Stock = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L, 4L, 4L, 4L), .Label = c("AAA", "BBB", "CCC", "DDD"), class =     "factor"), 
    Date = structure(c(17632, 17633, 17634, 17632, 17633, 17634, 
    17632, 17633, 17634, 17632, 17633, 17634), class = "Date"), 
    Price = c(5L, 6L, 7L, 10L, 9L, 9L, 6L, 6L, 6L, 10L, 30L, 
    50L), Market.Cap = c(1000L, 1300L, 1600L, 1600L, 1000L, 1000L, 
    600L, 600L, 600L, 400L, 1000L, 2000L)), .Names = c("Stock", 
"Date", "Price", "Market.Cap"), row.names = c(NA, -12L), class =     "data.frame")

当您的结构存储在
df122

中时,这只会删除值超过1500的行,而不是在特定日期发生的同一股票的所有行。@CalumYou,很抱歉,我没有得到,当我选中它时,删除了最后一列中所有值超过1500的行。@CalumYou,我的回答中没有包括数据比较,请告诉我这是否是您所指的内容?我不知道OP只需要在支票上注明具体日期。“因为它是2018-04-11唯一一家市值>1500的公司”@sammyramz,请您尝试编辑代码,并告诉我这是否对您有帮助?为群筛选文章发布的链接非常有帮助。
subset(df122 , Market.Cap < 1500 | Date == as.Date("2018-04-11"))
tat <- apply(df122[4], 1, function(val) any(val < 1500))
df122[ tat , ]