基于R(dplyr)中的两个条件进行分组和重命名
我有一个数据集,df: 最后,我希望能够将数据分组成“块”,其中文件夹列包含字符串“OUT”,确保考虑日期和与其关联的空消息值。是否有一种方法可以为每个“Out”实例创建一个块,并在计算其持续时间时生成一个空消息行基于R(dplyr)中的两个条件进行分组和重命名,r,dplyr,stringr,difftime,R,Dplyr,Stringr,Difftime,我有一个数据集,df: 最后,我希望能够将数据分组成“块”,其中文件夹列包含字符串“OUT”,确保考虑日期和与其关联的空消息值。是否有一种方法可以为每个“Out”实例创建一个块,并在计算其持续时间时生成一个空消息行 Folder DATE Message Outdata 9/9/2019 5:46:00 Outdata
Folder DATE Message
Outdata 9/9/2019 5:46:00
Outdata 9/9/2019 5:46:01
Outdata 9/9/2019 5:46:02
In 9/9/2019 5:46:03 hello
In 9/9/2019 5:46:04 hello
Outdata 9/10/2019 6:00:01
Outdata 9/10/2019 6:00:02
In 9/11/2019 7:50:00 hello
In 9/11/2019 7:50:01 hello
我希望此输出:
New Variable Duration Message
Outdata1 2 sec
Outdata2 1 sec
我已经包括了dput:
dput(sample)
structure(list(Folder = structure(c(2L, 2L, 2L, 1L, 1L, 2L, 2L,
1L, 1L), .Label = c("In", "Outdata"), class = "factor"), Date = structure(c(5L,
6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L), .Label = c("9/10/2019 6:00:01 AM",
"9/10/2019 6:00:02 AM", "9/11/2019 7:50:00 AM", "9/11/2019 7:50:01 AM",
"9/9/2019 5:46:00 AM", "9/9/2019 5:46:01 AM", "9/9/2019 5:46:02 AM",
"9/9/2019 5:46:03 AM", "9/9/2019 5:46:04 AM"), class = "factor"),
Message = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("",
"hello"), class = "factor")), class = "data.frame", row.names = c(NA,
-9L))
这是我尝试过的,效果很好,我只需要考虑到
空消息值也是如此
library(dplyr)
df %>%
mutate(DATE = as.POSIXct(DATE, format = "%m/%d/%Y %I:%M:%S %p"),
gr = cumsum(Folder != lag(Folder, default = TRUE))) %>%
filter(Folder == "Out") %>%
arrange(gr, DATE) %>%
group_by(gr) %>%
summarise(Duration = difftime(last(DATE), first(DATE), units = "secs")) %>%
mutate(gr = paste0('Out', row_number()))
上面的代码工作正常,但我不确定如何满足row==“p>的条件,可能只是将
消息粘贴到一个字符串中
library(dplyr)
sample %>%
mutate(DATE = as.POSIXct(Date, format = "%m/%d/%Y %I:%M:%S %p"),
gr = cumsum(Folder != lag(Folder, default = TRUE))) %>%
filter(Folder == "Outdata") %>%
arrange(gr, DATE) %>%
group_by(gr) %>%
summarise(Duration = difftime(last(DATE), first(DATE), units = "secs"),
Message = paste0(Message, collapse = "")) %>%
mutate(gr = paste0('Out', row_number()))
也许可以将过滤器(文件夹==“Out”)%%>%%
更改为过滤器(文件夹==“Out”,消息==”“)%%>%%
?好的,我知道了!我想我会在上面的代码之前执行这个吗?非常感谢。我明白了,让我试试这个。“collapse”和“paste0”到底做了什么?@TanishaHudson它将组中的所有消息值捕获为一个字符串。好了,这很有效,哇,谢谢!(我必须等几分钟才能接受!)谢谢!你好@Ronak,还有一个条件。我必须按主题栏分组,这就是我最终找到时间的方式。我也可以加上:group_by(主题)吗?我想我会提出一个新问题。非常感谢。