[英]Invalid Factor Level, NA generated R
我正在使用的數據樣本如下。 我已經省略了所有帶有“ NA”的行。
gss.s[1:5,]
abany advfront arrest
2 YES Agree NO
3 YES Strongly agree YES
10 YES Agree YES
16 YES Agree NO
21 NO Strongly agree NO
我試圖在abany列中用1替換“ YES”,在abany列中用-1替換“ NO”。 我嘗試使用replace replace(gss.s [,1],“ YES”,1),但收到了錯誤的無效因子水平,生成了NA。 我閱讀了有關此問題的上一篇文章,卻不知道如何將解決方案應用於我的問題。
您可以在列上使用ifelse()
,一次更改所有值。
gss.s$abany <- ifelse(gss.s$abany == "YES", 1, -1)
gss.s
## abany advfront arrest
## 2 1 Agree NO
## 3 1 Strongly agree YES
## 10 1 Agree YES
## 16 1 Agree NO
## 21 -1 Strongly agree NO
y <- data.frame ("abany"=c("YES","YES","YES","YES","NO"),
"advfront"=c("Agree","Strongly Agree","Agree","Agree","Strongly Agree"),
"arrest"=c("NO","YES","YES","NO","NO"))
我會嘗試另一種方法:將因子列轉換為字符
y$abany <- as.character.factor (y$abany)
因此,現在您更改列的值沒有任何問題
y[y$abany=="YES", "abany"] <- 1
y[y$abany=="NO", "abany"] <- -1
您還可以創建一個向量,在其中定義要進行的更改。 與ifelse
語句相比,如果您擁有大型數據集,則速度會更快。
translate <- c(YES=1,NO=-1)
gss.s$abany2 <- translate[as.character(gss.s$abany)]
gss.s
# abany advfront arrest abany2
# 1 YES Agree NO 1
# 2 YES Strongly agree YES 1
# 3 YES Agree YES 1
# 4 YES Agree NO 1
# 5 NO Strongly agree NO -1
如果您要進行多個更改,則也不必為嵌套的ifelse
函數ifelse
:
translate2 <- c('Strongly agree'=2,Agree=1,Disagree=-1,'Strongly disagree'=-2 )
gss.s$advfront2 <- translate2[as.character(gss.s$advfront)]
gss.s
# abany advfront arrest abany2 advfront2
# 1 YES Agree NO 1 1
# 2 YES Strongly agree YES 1 2
# 3 YES Agree YES 1 1
# 4 YES Agree NO 1 1
# 5 NO Strongly agree NO -1 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.