次のサンプルデータでは、3つの条件変数(Denial1、Denial2、およびDenial3)の値に基づいて、新しい変数 "Den"(値 "0"または "1")を作成しようとしています。
3つの条件変数のいずれかに「0」と「1」が含まれる場合、値が含まれる各条件変数の値が「1」(NAではないなど)の場合にのみ「0」が必要です。
structure(list(Denial1 = NA_real_, Denial2 = 1, Denial3 = NA_real_,
Den = NA), .Names = c("Denial1", "Denial2", "Denial3", "Den"
), row.names = 1L, class = "data.frame")
「Den」の欠損値NAをもたらす次のコマンドの両方を試しました。
DF$Den<-ifelse (DF$Denial1 < 1 | DF$Denial2 < 1 | DF$Denial3 < 1, "0", "1")
DF$Den<-ifelse(DF$Denial1 < 1,"0", ifelse (DF$Denial2 < 1,"0", ifelse(DF$Denial3 < 1,"0", "1")))
誰かがこれを行う方法を示すことができますか?
@jaimedashと@Old_Mortalityからの提案に基づいて、私は解決策を見つけました:
DF$Den <- ifelse(DF$Denial1 < 1 & !is.na(DF$Denial1) | DF$Denial2 < 1 &
!is.na(DF$Denial2) | DF$Denial3 < 1 & !is.na(DF$Denial3), "0", "1")
次に、条件変数のすべての値がNAである場合にNAの値を保証するには:
DF$Den <- ifelse(is.na(DF$Denial1) & is.na(DF$Denial2) & is.na(DF$Denial3),
NA, DF$Den)
どう?
DF$Den<-ifelse (is.na(DF$Denial1) | is.na(DF$Denial2) | is.na(DF$Denial3), "0", "1")
これにはもっと簡単な解決策があります。あなたが説明するのは、&
演算子であり、したがって原始的に行うことができます。
> c(1,1,NA) & c(1,0,NA) & c(1,NA,NA)
[1] TRUE FALSE NA
すべてが1の場合、1が返されます。いずれかが0の場合、0です。すべてがNAの場合、NAです。
あなたの場合、コードは次のようになります。
DF$Den<-DF$Denial1 & DF$Denial2 & DF$Denial3
これが機能するためには、character
での作業を停止し、numeric
またはlogical
タイプを使用する必要があります。
any
の非常に簡単な使用
df <- <your structure>
df$Den <- apply(df,1,function(i) {ifelse(any(is.na(i)) | any(i != 1), 0, 1)})
dplyrを使用する別のソリューションは次のとおりです。
df <- ## your data ##
df <- df %>%
mutate(Den = ifelse(any(is.na(Den)) | any(Den != 1), 0, 1))