R logo

あるデータフレームに論理型(factor)の列を追加しようとして、下記のように作成した。

Data <- %&gt;%
mutate(Group = factor(NA, levels = c("LBD-LATE(-)", "LBD-LATE(+)", "AD-LATE(-)", "AD-LATE(+)", "LBDAD-LATE(-)", "LBDAD-LATE(+)"))

そして、その列に下記のようにデータを追加しようとしたら、

Data1$Group[Data1$Cohort=="LBD"&Data1$LATE=="LATE(+)"] <- "LBD-LATE(+)"
Data1$Group[Data1$Cohort=="LBD"&Data1$LATE=="LATE(-)"] <- "LBD-LATE(-)"
Data1$Group[Data1$Cohort=="AD" &Data1$LATE=="LATE(+)"] <- "AD-LATE(+)"
Data1$Group[Data1$Cohort=="AD"&Data1$LATE=="LATE(-)"] <- "AD-LATE(-)"
Data1$Group[Data1$Cohort=="LBD+AD"&Data1$LATE=="LATE(+)"] <- "LBDAD-LATE(+)"
Data1$Group[Data1$Cohort=="LBD+AD" &Data1$LATE=="LATE(-)"] <- "LBDAD-LATE(-)"

下記エラーが出て、

invalid factor level, NA generated

すべて "NA" で返されてしまった……

r-invalid-factor-level-2

 

 

調べると、ベクターやデータフレームで、もともと論理型(factor)として設定していない値を追加しようとすると、Rが混乱して、NAで返してくるよう。

その場合、一度文字型(character)に変換してから追加し、その後で論理型(factor)に戻すとよいそうなので、下記のように、前後にコードを追加。

Data$Group <- as.character(Data$Group)
Data1$Group[Data1$Cohort=="LBD"&Data1$LATE=="LATE(+)"] <- "LBD-LATE(+)"
Data1$Group[Data1$Cohort=="LBD"&Data1$LATE=="LATE(-)"] <- "LBD-LATE(-)"
Data1$Group[Data1$Cohort=="AD" &Data1$LATE=="LATE(+)"] <- "AD-LATE(+)"
Data1$Group[Data1$Cohort=="AD"&Data1$LATE=="LATE(-)"] <- "AD-LATE(-)"
Data1$Group[Data1$Cohort=="LBD+AD"&Data1$LATE=="LATE(+)"] <- "LBDAD-LATE(+)"
Data1$Group[Data1$Cohort=="LBD+AD" &Data1$LATE=="LATE(-)"] <- "LBDAD-LATE(-)"
Data1$Group <- factor(Data1$Group, levels = c("LBD-LATE(-)", "LBD-LATE(+)", "AD-LATE(-)", "AD-LATE(+)", "LBDAD-LATE(-)", "LBDAD-LATE(+)"))



無事解決♪

r-invalid-factor-level-1
にほんブログ村 子育てブログ ワーキングマザー育児へ