У меня есть dataframe с некоторыми числовыми столбцами. Некоторая строка имеет значение 0, которое в статистическом анализе должно считаться нулевым. Каков самый быстрый способ заменить все значение 0 на NULL в R?Замените все значения 0 на NA
ответ
Замена 0 до NA:
df[df == 0] <- NA
Каким будет эквивалентный синтаксис для объекта data.table? – dadrivr
Я вижу, что вы получили много голосов, но не думайте, что это соответствующим образом охватывает случаи краев нечисловых столбцов со значениями «0», которые не были запрошены для установки на
#Sample data
set.seed(1)
dat <- data.frame(x = sample(0:2, 5, TRUE), y = sample(0:2, 5, TRUE))
#-----
x y
1 0 2
2 1 2
3 1 1
4 2 1
5 0 0
#replace zeros with NA
dat[dat==0] <- NA
#-----
x y
1 NA 2
2 1 2
3 1 1
4 2 1
5 NA NA
Альтернативный способ без [<-
функции:
Образец данных кадра dat
(беззастенчиво скопированы с @ ответ Чейза):
dat
x y
1 0 2
2 1 2
3 1 1
4 2 1
5 0 0
Нуль можно заменить на NA
в is.na<-
функции:
is.na(dat) <- !dat
dat
x y
1 NA 2
2 1 2
3 1 1
4 2 1
5 NA NA
Вы можете заменить 0
с NA
только в числовых полях (т.е. за исключением вещей, как факторы), но она работает на столбец за столбцом основе:
col[col == 0 & is.numeric(col)] <- NA
С функцией, вы можете применить это ко всей Вашей структуры данных:
changetoNA <- function(colnum,df) {
col <- df[,colnum]
if (is.numeric(col)) { #edit: verifying column is numeric
col[col == -1 & is.numeric(col)] <- NA
}
return(col)
}
df <- data.frame(sapply(1:5, changetoNA, df))
Хотя вы могли бы заменить 1:5
с количеством столбцов в вашем фрейме данных или с 1:ncol(df)
.
Я не уверен, что это верное решение. Как насчет столбцов 6 и более. Они будут сокращены. – userJT
Вот почему я предложил заменить '1: 5' на' 1: ncol (df) 'в конце. Я не хотел, чтобы уравнение было слишком сложным или трудным для чтения. –
, но что, если в столбцах 6 и 7 - тип данных является символом, и никакая замена не должна выполняться. В моей проблеме мне нужна замена только в столбцах с 12 по 15, но весь df имеет 21 столбец (многие из них не должны быть затронуты вообще). – userJT
Позвольте мне предположить, что ваш data.frame представляет собой сочетание разных типов данных, и не все столбцы необходимо изменить.
изменить столбцы только от 12 до 18 (из всего 21), просто сделать это
df[, 12:18][df[, 12:18] == 0] <- NA
Потому что кто-то попросил Data.Table версию этого, и потому, что данное data.frame решение не работа с data.table, я предоставляю решение ниже.
В принципе, использовать :=
оператор ->DT[x == 0, x := NA]
library("data.table")
status = as.data.table(occupationalStatus)
head(status, 10)
origin destination N
1: 1 1 50
2: 2 1 16
3: 3 1 12
4: 4 1 11
5: 5 1 2
6: 6 1 12
7: 7 1 0
8: 8 1 0
9: 1 2 19
10: 2 2 40
status[N == 0, N := NA]
head(status, 10)
origin destination N
1: 1 1 50
2: 2 1 16
3: 3 1 12
4: 4 1 11
5: 5 1 2
6: 6 1 12
7: 7 1 NA
8: 8 1 NA
9: 1 2 19
10: 2 2 40
Или 'for (j в именах (DT)); set (DT, который (DT [[j]] == 0), j, NA) '. См. [Здесь] (http://stackoverflow.com/a/7249454/4241780) для более подробного обсуждения использования data.table для поиска и замены значений. – JWilliman
попытка ниже
ДФ [is.na (ДФ)] < - 0
Это обратное - вопрос заключается в том, как заменить 0 на NA, а не на NA с помощью 0. – Gregor
- 1. Замените integer (0) на NA
- 2. Замените выдающиеся значения из среднего на NA
- 3. Замените NA на 0 в R, используя цикл на dataframe
- 4. Замените NA в окне вокруг значения
- 5. Замените значения NA последним не-NA, и вспомните исходные значения, отличные от NA?
- 6. Замена значений NA на 0
- 7. Замените 0s на NA в таблицах
- 8. Замените na на значение из другого df
- 9. projectRaster возвращает все значения NA
- 10. Замените [0-9] на 0 [0-9]
- 11. Замените значения NA на месте без изменений в R
- 12. Замените все значения в строке на 0, если одна из переменных имеет отсутствующие данные.
- 13. RowSums NA + NA дает 0
- 14. Заменить все значения, отличающиеся от значения «NA»
- 15. Строка замените 0 на 1.7E
- 16. замените все 0 в списке с numpy.nan
- 17. замените значения na в полном наборе данных, используя r
- 18. R., заменив представление нулевого значения на NA
- 19. Замените все записи NA в таблице R разными случайными
- 20. Заливка NA значения с 0 на основе столбцов значений
- 21. Почему загрузка возвращает все значения NA
- 22. R: Сделать все значения строк NA, если одно значение равно NA
- 23. Замена значений NA на 0 в R
- 24. Изменить #NA До 0
- 25. Замените null на 0 в MySQL
- 26. Замените отсутствующие значения на среднее значение
- 27. Заменить отрицательные значения на значения NA
- 28. Замените дублированные элементы на NA, вместо их удаления
- 29. заменяет NA на 0 в R dataframe
- 30. замените все на нижнюю букву
Я не думаю, что вы хотите/может заменить значения NULL, но NA служит этой цели в R lingo. – Chase