Есть много сообщений о замене ценностей NA. Я знаю, что можно заменить NA в следующей таблице / кадре следующим:
x[is.na(x)]<-0
Но что, если я хочу ограничить его только определенными столбцами? Я покажу вам пример.
Во-первых, давайте начнем с набора данных.
set.seed(1234)
x <- data.frame(a=sample(c(1,2,NA), 10, replace=T),
b=sample(c(1,2,NA), 10, replace=T),
c=sample(c(1:5,NA), 10, replace=T))
Который дает:
a b c
1 1 NA 2
2 2 2 2
3 2 1 1
4 2 NA 1
5 NA 1 2
6 2 NA 5
7 1 1 4
8 1 1 NA
9 2 1 5
10 2 1 1
Хорошо, поэтому я хочу ограничить замену только столбцами «a» и «b». Моя попытка была:
x[is.na(x), 1:2]<-0
и:
x[is.na(x[1:2])]<-0
Что не работает.
Моя попытка data.table, где y<-data.table(x)
, очевидно, никогда не сработала:
y[is.na(y[,list(a,b)]), ]
Я хочу передать столбцы внутри аргумента is.na, но это явно не сработает.
Я хотел бы сделать это в data.frame и data.table. Моя конечная цель - перекодировать 1: 2 в 0: 1 в 'a' и 'b', сохраняя при этом 'c' таким, какой он есть, поскольку это не логическая переменная. У меня куча столбцов, поэтому я не хочу делать это одну за другой. И я просто хотел бы знать, как это сделать.
У вас есть какие-нибудь предложения?