簡體   English   中英

無效的因子水平,NA生成R

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM