Как я могу устранить неполадки с функцией удаления строки - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь удалить такую ​​строку:

data <- data[-1645,]

Однако после запуска кода строка все еще существует. Я могу это сказать, потому что в этой строке есть выброс, который отображается на всех моих графиках, и когда я просматриваю данные, я могу отсортировать столбец, чтобы легко найти нежелательный выброс. Раньше у меня не было проблем с удалением строк - сталкивался ли кто-нибудь с чем-нибудь подобным? Я понимаю ограничения удаления выбросов, и я обычно не удаляю их, однако по ряду причин я хотел бы увидеть, как выглядят данные без этого (в этом случае все другие значения в переменной ответа находятся между - 1 и 0, а в этой строке значение 10 ^ 4).

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Вам действительно нужно предоставить дополнительную информацию, но есть несколько способов устранить проблему. Первый - это распечатать удаляемую строку:

data [1645,]

Это выброс? Вы не сказали нам, как вы определили выброс. Если строки были удалены из фрейма данных, имена строк не изменяются, но значения индекса изменяются, например,

set.seed(42)
x <- sample.int(25)
y <- sample.int(25)
data <- data.frame(x, y)
head(data)
#    x  y
# 1 17  2
# 2  5  8
# 3  1  3
# 4 10  1
# 5  4 10
# 6 18 11
data <- data[-c(5, 10, 15, 20, 25), ]
head(data)
#    x  y
# 1 17  2
# 2  5  8
# 3  1  3
# 4 10  1
# 6 18 11
# 7 25 15
data[6, ]
#    x  y
# 7 25 15
data["6", ]
#    x  y
# 6 18 11

Обратите внимание, что 6-я строка данных имеет имя строки «7», но строка с именем «6» является 5-й строкой во фрейме данных, потому что мы удалили 5-ю строку. Функция which выдаст вам значение индекса, но если вы определили выброс, просмотрев распечатку, вы получили имя строки, которое может отличаться от индекса. Если мы хотим удалить значения x больше 24, вот один из способов сделать это:

data[data$x<25, ]
0 голосов
/ 02 июня 2020

Поигравшись с данными, я думаю, что лучшим объяснением является то, что индексация отключена. Это соответствует тому, что говорил дкарлсон - что он может удалить 1645-ю строку, просто она не помечена как таковая. Я думаю, что лучшим решением является использование подмножества:

data <- subset(data, Yield.Decline < 100)

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

...