R: объединение копий одной и той же переменной - PullRequest
3 голосов
/ 06 марта 2012

У меня есть такие данные в R:

subjID = c(1,2,3,4)
var1 = c(3,8,NA,6)
var1.copy = c(NA,NA,5,NA)
fake = data.frame(subjID = subjID, var1 = var1, var1 = var1.copy)

, который выглядит так:

> fake
  subjID var1 var1.1
1      1    3     NA
2      2    8     NA
3      3   NA      5
4      4    6     NA

Var1 и Var1.1 представляют одну и ту же переменную, поэтому у каждого субъекта есть NA для одного столбца и числовое значение в другом (ни у одного нет двух NA или двух чисел). Я хочу объединить столбцы, чтобы получить один Var1: (3, 8, 5, 6).

Какие-нибудь советы, как это сделать?

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Если вы имеете дело только с двумя столбцами, а никогда не двумя числами или двумя NA, вы можете вычислить среднее значение по строке и игнорировать пропущенные значения:

fake$fixed <- rowMeans(fake[, c("var1", "var1.1")], na.rm=TRUE)
2 голосов
/ 06 марта 2012

Это зависит от того, как вы хотите объединить, если есть конфликты.

Вы можете просто поместить все значения не-NA в var.1.1 в соответствующий слот var1.В случае конфликтов это будет благоприятствовать var.1.1.

var1[!is.na(var1.copy)] <- var1.copy[!is.na(var1.copy)]

Вы можете просто заполнить все значения NA в var1 соответствующими значениями var1.1.В случае конфликта это будет благоприятствовать var1.

var1[is.na(var1)] <- var1.copy[is.na(var1)]
2 голосов
/ 06 марта 2012

Вы можете использовать is.na, который может быть векторизован как:

# get all the ones we can from var1
var.merged = var1;
# which ones are available in var1.copy but not in var1?
ind = is.na(var1) & !is.na(var1.copy);
# use those to fill in the blanks
var.merged[ind] = var1.copy[ind];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...