У меня есть фрейм данных, df, I w sh, чтобы отфильтровать один из столбцов в этом наборе данных, чтобы показывать только при наличии значения и удалять пустые значения.
Name Edit Folder Message Date
Hello T Out 1/5/2020 5:00:00 AM
Hi T Out 1/5/2020 5:00:02 AM
T Out 1/5/2020 5:00:03 AM
Bye T Out 1/5/2020 5:00:04 AM
See you! T drafts 1/5/2020 5:00:05 AM
I wi sh чтобы получить этот вывод:
Name Edit Folder Message Date
Hello T Out 1/5/2020 5:00:00 AM
Hi T Out 1/5/2020 5:00:02 AM
Bye T Out 1/5/2020 5:00:04 AM
See you! T drafts 1/5/2020 5:00:05 AM
Таким образом, по существу, строка с пустым значением Name была удалена.
Вот как я фильтрую:
df1<-df %>%
mutate(Date = lubridate::mdy_hms(Date),
cond = Edit == "True" & Name !== "" & Folder == "Out" | Folder == "drafts" & Message == "" ,
grp = cumsum(!cond)) %>%
filter(cond) %>%
group_by(grp) %>%
summarise(starttime = first(Date),
endtime = last(Date),
duration = difftime(endtime, starttime, units = "secs")) %>%
select(-grp)
Как бы я включил, если имя имеет значение, сохранил это и отбросил остальные в этом коде?
dput:
structure(list(Name = structure(c(3L, 4L, 1L, 2L, 5L), .Label = c("",
"Bye", "Hello", "Hi", "See you!"), class = "factor"), Edit = c(TRUE,
TRUE, TRUE, TRUE, TRUE), Folder = structure(c(2L, 2L, 2L, 2L,
1L), .Label = c("drafts", "Out"), class = "factor"), Message = c(NA,
NA, NA, NA, NA), Date = structure(1:5, .Label = c("1/5/2020 5:00:00 AM",
"1/5/2020 5:00:02 AM", "1/5/2020 5:00:03 AM", "1/5/2020 5:00:04 AM",
"1/5/2020 5:00:05 AM"), class = "factor")), class = "data.frame", row.names = c(NA,
-5L))