R 在不同的变量上,用附加条件在每组中查找最长日期。获取错误Max()&;未为日期对象定义

R 在不同的变量上,用附加条件在每组中查找最长日期。获取错误Max()&;未为日期对象定义,r,R,这是我拥有的示例数据: t<- data.frame(id=c(1,1,2,2,3,3), measureX =c(1,2,1,3,1,1), date=c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6')) t$date <- as.Date(t$date) 你知道如何做到这一点吗?谢谢大家! 库(lubridate) library(lubridate) library(dplyr) t &l

这是我拥有的示例数据:

t<- data.frame(id=c(1,1,2,2,3,3), measureX =c(1,2,1,3,1,1), date=c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6'))
t$date <- as.Date(t$date)
你知道如何做到这一点吗?谢谢大家!

库(lubridate)
library(lubridate)
library(dplyr)

t <- data.frame(id = c(1,1,2,2,3,3), 
               measureX = c(1,2,1,3,1,1), 
               date = c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6'))

t %>% 
  mutate(date = ymd(date)) %>%
  group_by(id) %>% 
  summarize(max(date))
图书馆(dplyr) t% 突变(日期=ymd(日期))%>% 分组依据(id)%>% 汇总(最长(日期))
首先,
max()
将向量而不是逻辑语句作为其参数。因此,我们将使用
filter()
来执行我们的逻辑

其次,
t
是一个
data.frame
,因此需要在
summary()
(或
summary()
,具体取决于拼写首选项)命令中使用
max


我不认为这是“另一个变量上的条件”。啊,遗漏了那部分。谢谢非常感谢。但是我想要max(date&measureX==1),max()中还有一个额外的条件,它现在不起作用。是的,看起来@dyrland为过滤添加了一行谢谢。我举了这个例子。在我的数据中,我真的需要根据另一个变量的条件找到最大值。这种情况在实际情况下可能会有所不同。所以不总是像示例中那样==1。这意味着我不能总是事先做一个过滤器。即使在这个简单的例子中,当我尝试max(t$measureX==1&t$id)时,它也能工作。但是当我将其更改为max(t$measureX==1&t$date)时,它会给出一个错误。您不能在
max()中提供逻辑(
measureX==1&date
)我想您的下一个问题是:如何动态筛选数据?(或者对不同的组进行不同的筛选!)我实际上需要基于条件的最长日期,然后使用最长日期来做其他事情。所以我无法对数据集进行大量过滤。Huzzah用于评论、迭代和答案!
library(lubridate)
library(dplyr)

t <- data.frame(id = c(1,1,2,2,3,3), 
               measureX = c(1,2,1,3,1,1), 
               date = c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6'))

t %>% 
  mutate(date = ymd(date)) %>%
  group_by(id) %>% 
  summarize(max(date))
t<- data.frame(id=c(1,1,2,2,3,3), measureX =c(1,2,1,3,1,1), date=c('2021-1-1','2021-1-2','2021-1-3','2021-1-4','2021-1-5','2021-1-6'))
t$date <- as.Date(t$date)


t %>%
  group_by(id) %>%
  filter(measureX == 1) %>% #condition on another variable
  summarize(max(date))
t %>%
  group_by(id) %>%
  mutate(max_date_given_condition = max(date[measureX == 1])) %>% 
  ungroup() #to be safe