使用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