Удаление дубликатов данных и замена пропущенных значений в определенных областях - PullRequest
0 голосов
/ 01 апреля 2019

Так что я искал этот код, который изначально был листом Excel.Как только набор данных помещен в R Studio, у меня возникает несколько проблем.

Прежде всего я изменил все пустые ячейки на NA, как только я запустил

CarparkData[is.na(CarparkData)] <- 0

, он только изменяет данные, которые изначально были NA, а не пустую ячейку.

Во-вторыхудалив дублирующиеся данные, я использовал следующий код, и ничего не произошло.

library("dplyr")
install.packages("tidyverse")
library(tidyverse)
x <-CarparkData
duplicated(x)


x[duplicated(x),]
x[!duplicated(x),]

Поскольку у меня есть строка для даты и времени, я хотел бы использовать ее в качестве столбца для удаления строк дублированных данных.Поскольку у меня есть данные, которые являются одинаковыми, но они в разное время по сравнению с данными, которые одинаковы, а дата и время совпадают.

И, в-третьих, замена пропущенных значений. На некоторых данных написано ПОЛНОЕ, и я хотел бы поместить их в один столбец, а затем заменить ПОЛНОЕ на число, которое заполнено в этой конкретной автостоянке, поэтому меняются ПОЛНЫЕ ячейкив этом столбце, а не во всех полных ячейках.

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

> dput(head(CarparkData))
structure(list(Parnell = c(188L, 183L, 185L, 229L, 237L, 272L
), Ilac = c(665, 683, 694, 769, 786, 839), Jervis = c(421, 408, 
403, 417, 423, 455), Arnotts = c(340, 344, 350, 359, 359, 355
), Malboro = c(160L, 160L, 156L, 157L, 173L, 207L), Abbey = c(0, 
0, 0, 0, 0, 0), `Thomas Street` = c(173, 173, 173, 186, 189, 
198), `Christ Church` = c(77, 76, 74, 73, 83, 91), Setanta = structure(c(24L, 
23L, 23L, NA, NA, 46L), .Label = c("10", "100", "101", "102", 
"103", "104", "107", "108", "110", "111", "112", "113", "114", 
"115", "120", "123", "125", "128", "129", "131", "14", "17", 
"19", "21", "24", "27", "28", "29", "30", "31", "32", "34", "36", 
"39", "40", "44", "45", "47", "48", "51", "52", "53", "56", "57", 
"6", "60", "63", "66", "67", "7", "70", "72", "74", "78", "79", 
"80", "81", "82", "84", "85", "86", "89", "9", "91", "92", "93", 
"94", "96", "98", "FULL"), class = "factor"), Dawson = c(70, 
87, 83, 118, 122, 140), Trinity = c(142L, 143L, 145L, 165L, 167L, 
191L), Greenrcs = structure(c(NA, 8L, 9L, NA, 4L, 5L), .Label = c("1125", 
"157", "205", "250", "262", "264", "266", "267", "270", "296", 
"305", "311", "319", "320", "324", "327", "342", "347", "350", 
"353", "364", "371", "374", "375", "378", "379", "459", "463", 
"591", "729", "754", "761", "879", "902", "903", "907", "911", 
"913", "916", "917", "922", "931", "944", "955", "974", "985", 
"FULL"), class = "factor"), Drury = c(148, 143, 147, 182, 193, 
235), `Brown Thomas` = c(230, 231, 0, 267, 272, 293), `Date & Time` = structure(1:6, .Label = c("2019-03-19 13:43:33", 
"2019-03-19 13:55:39", "2019-03-19 14:07:35", "2019-03-19 15:45:02", 
"2019-03-19 16:00:02", "2019-03-19 16:45:03", "2019-03-19 17:00:02", 
"2019-03-19 17:45:03", "2019-03-19 18:00:01", "2019-03-19 18:00:02", 
"2019-03-19 18:45:03", "2019-03-19 19:00:01", "2019-03-19 19:00:02", 
"2019-03-19 19:07:12", "2019-03-19 19:45:03", "2019-03-19 20:00:01", 
"2019-03-19 20:00:02", "2019-03-19 20:45:03", "2019-03-19 21:00:01", 
"2019-03-19 21:00:03", "2019-03-19 21:45:04", "2019-03-19 22:00:01", 
"2019-03-19 22:00:03", "2019-03-19 22:45:04", "2019-03-19 23:00:01", 
"2019-03-19 23:00:02", "2019-03-19 23:00:03", "2019-03-19 23:45:04", 
"2019-03-20 00:00:01", "2019-03-20 00:00:02", "2019-03-20 00:00:03", 
"2019-03-20 00:45:04", "2019-03-20 01:00:01", "2019-03-20 01:00:02", 
"2019-03-20 01:00:03", "2019-03-20 01:45:04", "2019-03-20 02:00:01", 
"2019-03-20 02:00:02", "2019-03-20 02:00:03", "2019-03-20 02:45:04", 
"2019-03-20 03:00:01", "2019-03-20 03:00:02", "2019-03-20 03:00:03", 
"2019-03-20 03:45:05", "2019-03-20 04:00:01", "2019-03-20 04:00:02", 
"2019-03-20 04:00:04", "2019-03-20 04:45:05", "2019-03-20 05:00:01", 
"2019-03-20 05:00:02",

Спасибо.

1 Ответ

0 голосов
/ 01 апреля 2019

Первый выпуск ... если вы хотите, чтобы все детали были пустыми, как NA, вы можете использовать пользовательскую функцию, такую ​​как:

empty_as_na <- function(x){
  if("factor" %in% class(x)) x <- as.character(x) ## since ifelse wont work with factors
  ifelse(as.character(x)!="", x, NA)
}

, а затем применить эту функцию:

dplyr::mutate_all(df, .funs = empty_as_na)

где df - ваш фрейм данных.


Вторая проблема ... для удаления повторяющихся строк вы должны взглянуть на dplyr::distinct()


Третья проблема... Я не понял, в чем проблема ... может быть, вы могли бы уточнить?


Извините, я не могу дать вам полный рабочий пример с данными, которые вы предоставили ... ноэти функции должны доставить вас туда, куда вы хотите.

РЕДАКТИРОВАТЬ

Решение для третьего вопроса на основе комментариев ...

Возможно, не самое элегантное решениено, опять же, это ограничено из-за непредоставления представлений.

Позвольте df быть вашим фреймом данных, column_new вашим новым столбцом, column_number столбцом, который вы упомянули, в котором были написаны числа или FULL,и column_car столбец, где находятся машины.

df %>% 
  mutate(
    column_new = case_when(
      column_number == "FULL" & column_car == "car_a" ~ 300,
      column_number == "FULL" & column_car == "car_b" ~ 500,
      TRUE ~ column_number
    )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...