2014-01-29 3 views
6

У меня в настоящее время есть dataframe, в котором есть несколько строк, которые я бы хотел преобразовать в «NA». Когда я впервые импортировал этот dataframe из .csv, я мог бы использовать na.strings = c («A», «B», «C») и так далее, чтобы удалить значения, которые я не хотел.na.strings применяется к dataframe

Я хочу сделать то же самое еще раз, но на этот раз с помощью dataframe уже, не импортируя другой .csv

для импорта данных, я использовал:

data<-read.csv("code.csv", header=T, strip.white=TRUE, stringsAsFactors=FALSE, na.strings=c("", "A", "B", "C")) 

Теперь, с «данными», я хотел бы подмножество его при удалении еще более конкретных значений в строках .. Я пробовал:

data2<-data.frame(data, na.strings=c("D", "E", "F")) 

Конечно, это не работает, потому что я думаю, что na.strings работает только с «прочитанным» пакетом .. не другими функциями. Есть ли какой-либо эквивалент, чтобы просто преобразовать определенные значения в NA, чтобы я мог na.omit (data2) довольно легко?

Благодарим за помощь.

ответ

1

Просто присвойте значения NA напрямую.

.: например

x <- data.frame(a=1:5, b=letters[1:5]) 
# > x 
# a b 
# 1 1 a 
# 2 2 b 
# 3 3 c 
# 4 4 d 
# 5 5 e 

# convert the 'b' and 'd' in columb b to NA 
x$b[x$b %in% c('b', 'd')] <- NA 
# > x 
# a  b 
# 1 1 a 
# 2 2 <NA> 
# 3 3 c 
# 4 4 <NA> 
# 5 5 e 
+0

Спасибо за ответы на все вопросы всех. Многие были полезны –

1

Поскольку у нас нет ваших данных я буду использовать mtcars. Предположим, что мы хотим, чтобы установить значения в любой точке mtcars, которые равны 4 или 19,2 к NA

ind <- which(mtcars == 4, arr.ind = TRUE) 
mtcars[ind] <- NA 

В вашей установки вы бы заменить это число на «D» или «E»

+0

Спасибо Свену. Ты прав. Я отредактировал свой ответ. Ваш ответ лучше :) – Vincent

1
data[ data == "D" ] = NA 

Заметим, что если вы пытались заменить NA на «D», обратное (df [df == NA] = «D») не будет работать; Вы должны были бы использовать ф.р. [is.na (Df)] < - "D"

3

Вот способ, чтобы заменить значения в нескольких столбцах:

# an example data frame 
dat <- data.frame(x = c("D", "E", "F", "G"), 
        y = c("A", "B", "C", "D"), 
        z = c("X", "Y", "Z", "A")) 
# x y z 
# 1 D A X 
# 2 E B Y 
# 3 F C Z 
# 4 G D A 

# values to replace 
na.strings <- c("D", "E", "F") 

# index matrix 
idx <- Reduce("|", lapply(na.strings, "==", dat)) 

# replace values with NA 
is.na(dat) <- idx 

dat 
#  x y z 
# 1 <NA> A X 
# 2 <NA> B Y 
# 3 <NA> C Z 
# 4 G <NA> A 
Смежные вопросы