Отфильтруйте столбец, чтобы выявить его только при наличии значения, и удалите остальные в R (R, dplyr, lubridate). - PullRequest
1 голос
/ 27 февраля 2020

У меня есть фрейм данных, 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))

1 Ответ

2 голосов
/ 27 февраля 2020

В base R мы можем использовать subset

subset(df1, Name != "")
...