Удалить наблюдение на основе заданного условия - PullRequest
0 голосов
/ 18 апреля 2020

Я хотел бы удалить указанное c наблюдение из набора данных. Каждое наблюдение имеет серийный номер (идентификационный номер), день (дни недели с понедельника по воскресенье), 7 переменных от дня 1 до дня 7, каждая из которых представляет день недели. Day1 - Mon, а Day7 - Sun.

Я хотел бы удалить те наблюдения (сериалы), где day1 ... day7 равен нулю. Это случай с идентификатором 12, где в течение понедельника наблюдения не проводились (например, день, совпадающий с днем1, возвращает ноль). В случае 123 во вторник было зарегистрировано 3 наблюдения, я хотел бы сохранить этот сериал.

Я пытался преобразовать данные в длинные и на основе этого сделать сопоставление без успеха.

Вход:

  serial  day1 day2 day3 day4 day5 day6 day7 Day 
    12    0    1    2    1    1    3    1   Monday   
   123    0    3    0    3    3    0    3   Tuesday  
    10    0    3    0    3    3    3    3   Thursday 

Выход:

serial  day1 day2 day3 day4 day5 day6 day7 Day 
  123    0    3    0    3    3    0    3   Tuesday  

Пример данных

structure(list(serial = c(12, 123, 10), day1 = c(0, 0, 0), day2 = c(1, 
3, 3), day3 = c(2, 0, 0), day4 = c(1, 3, 3), day5 = c(1, 3, 3
), day6 = c(3, 0, 3), day7 = c(1, 3, 3), Day = structure(c(1L, 
3L, 2L), .Label = c("Monday", "Thursday", "Tuesday"), class = "factor")), row.names = c(NA, 
3L), class = "data.frame")

1 Ответ

1 голос
/ 18 апреля 2020

Следующий код выполняет то, о чем спрашивает вопрос.
Он использует пакет DescTools , чтобы иметь вектор названий дней недели и сопоставляет значения в столбце Day с этим вектором. Затем вставьте строку "day" с номерами дня и используйте эти строки, чтобы получить наблюдения и сохранить строки там, где они не равны нулю.

j <- match(df1$Day, DescTools::day.name)
j <- paste0("day", j)
df1[diag(as.matrix(df1[, j])) != 0, ]
#  serial day1 day2 day3 day4 day5 day6 day7      Day
#2    123    0    3    0    3    3    0    3  Tuesday
#3     10    0    3    0    3    3    3    3 Thursday
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...