Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
使用if\u else或case\u when语句筛选表以查找R中的一行_R_If Statement_Filter - Fatal编程技术网

使用if\u else或case\u when语句筛选表以查找R中的一行

使用if\u else或case\u when语句筛选表以查找R中的一行,r,if-statement,filter,R,If Statement,Filter,我需要筛选数据以选择最新日期的单行。 当有两行是最新日期时,我需要根据test结果进行过滤: 如果max(test)>=60我想用min(test)选择行,否则我想用max(test) 库(dplyr) 日期=c(“2020/04/16”、“2020-07-01”、“2020-07-01”) ID=c(12,12,12) 测试=rnorm(3,平均值=150,标准差=60) 数据=数据帧(ID、日期、测试) 数据$Date=lubridate::ymd(数据$Date) 我尝试了以下几点 da

我需要筛选数据以选择最新日期的单行。 当有两行是最新日期时,我需要根据
test
结果进行过滤:

如果
max(test)>=60
我想用
min(test)
选择行,
否则
我想用
max(test)

库(dplyr)
日期=c(“2020/04/16”、“2020-07-01”、“2020-07-01”)
ID=c(12,12,12)
测试=rnorm(3,平均值=150,标准差=60)
数据=数据帧(ID、日期、测试)
数据$Date=lubridate::ymd(数据$Date)
我尝试了以下几点

data = data%>%
  filter(Date == max(Date))%>%
  filter(if_else(max(test) >= 60, test == min(test), test == max(test)))

这些都不管用,尽管从逻辑上来说我认为它们应该管用。我得到了所有的错误


由(v0.3.0)于2020年11月18日创建,要解决您的方法,请使用
if
/
else
,因为这是一个标量比较

library(dplyr)
data%>%
  filter(Date == max(Date)) %>%
  filter(if(max(test) >= 60) test == min(test) else test == max(test))

#  ID       Date     test
#1 12 2020-07-01 78.43785

谢谢你@Ronak Shah。您能否解释一下标量比较
max(test)>=60
返回长度为1的标量输出
if_else
需要输入向量。
data1 = data%>%
  filter(Date == max(Date))%>%
  if_else(max(test) >= 60, filter(test == min(test)), filter(test == max(test)))
library(dplyr)
data%>%
  filter(Date == max(Date)) %>%
  filter(if(max(test) >= 60) test == min(test) else test == max(test))

#  ID       Date     test
#1 12 2020-07-01 78.43785