если значения двух столбцов равны, измените значение результирующего столбца на NA, а если не сохраните исходное значение результирующего столбца - используя R - PullRequest
4 голосов
/ 24 сентября 2010

Этот вопрос похож на предыдущий.

Я предоставляю данные этого примера, чтобы ответить на мой вопрос.

id=c(1,2,3,4,5,6,7,8,9,10) 
var1=c(0,1,2,0,6,9,0,0,3,0) 
var2=c(0,0,2,3,0,0,0,5,0,0)
var3=c(0,1,4,3,6,9,0,5,3,0) 
data=data.frame(id,var1,var2, var3) 

Что мне нужно: если значения var1==var2, затем сделайте var3==NA, но если их нет, сохраните значение var3.Был бы рад сделать это, используя функцию ifelse в R, но приветствуются и другие варианты.

Я надеюсь, что вопрос достаточно ясен.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

С ifelse следует помнить одну вещь: может ли условие быть NA. В вашем случае, используя пример кода Дэвида, если var1 или var2 - NA, тогда var3 будет установлен в NA.

Я либо устанавливаю NA в F в условии, либо делаю что-то вроде:

var3 <- replace(var3, which(var1 == var2), NA)

Сравнить:

data$var1[1] = NA
with(data, ifelse(var1 == var2, NA, var3))
# [1] NA  1 NA  3  6  9 NA  5  3 NA
with(data, replace(var3, which(var1 == var2), NA))
# [1]  0  1 NA  3  6  9 NA  5  3 NA
1 голос
/ 24 сентября 2010

Это должно работать до тех пор, пока в двух векторах нет NA:

var3 <- ifelse(var1 == var2, NA, var3)
...