【问题标题】:Changing NA to a Different Factor in R将 NA 更改为 R 中的不同因子
【发布时间】:2016-05-10 08:46:07
【问题描述】:

我的数据集中有一列是因子值。这是一个示例数据集:

a <- c(1,4,6,3,8)
b <- c("No","Yes","NA", "Maybe", "Yes")
df <- data.frame(a,b)

我想将第 2 列(“b”)中的 NA 更改为“有时”。我尝试了两种不同的方法,在我看来,它们应该可以工作,但似乎没有给我正确的输出:

df[is.na(df$b)] <- "Sometimes"
df[df$b == "NA"] <- "Sometimes"

有没有办法做到这一点?

【问题讨论】:

  • "NA" 不是真正的NA,应该只是NA
  • df$b[df$b == "NA"] &lt;- "Sometimes"
  • 除了大卫所说的,请看这个问题的答案:how to change name of factor levels
  • 由于默认设置stringsAsFactors=TRUE,@jogo 的建议只有在设置df$b &lt;- as.character(df$b) 后才有效。是的,它不是“真正的”NA,那只是两个字母;因此它不会被is.na() 识别。
  • &lt;NA&gt; 形式是典型的缺失级别。那个是“真实的”,可以通过which(is.na(df$b)) 进行检查。

标签: r na


【解决方案1】:

如果您使用“NA”(即字符串),那么以下将其更改为不同的因素“有时”

> df <- data.frame(a,b)
> levels(df$b)
[1] "Maybe" "NA"    "No"    "Yes"
> levels(df$b)[levels(df$b)=="NA"]
[1] "NA"
> levels(df$b)[levels(df$b)=="NA"]<-"Sometimes"
> df$b
[1] No        Yes       Sometimes Maybe     Yes  
Levels: Maybe Sometimes No Yes
> df
  a         b
1 1        No
2 4       Yes
3 6 Sometimes
4 3     Maybe
5 8       Yes

否则,如果您使用过NA,这将添加Sometimes 作为新因子并使用is.na 进行更改:

b <- c("No","Yes",NA, "Maybe", "Yes")
df<-data.frame(a,b)
levels(df$b)<-c(levels(df$b),"Sometimes") # introduce a new factor
df[is.na(df$b),"b"]<-"Sometimes"

> df
  a         b
1 1        No
2 4       Yes
3 6 Sometimes
4 3     Maybe
5 8       Yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多