【问题标题】:invalid factor level with for-loop带有for循环的无效因子水平
【发布时间】:2013-10-28 07:30:19
【问题描述】:

拜托,我无法解决下一个问题:

 str(state_table)

chr [1:54] "AK" "AL" "AR" "AZ" "CA" "CO" "CT" "DC" "DE" "FL" ...

 z <- data.frame(stringsAsFactors=FALSE)

 for (i in state_table){z <- rbind(z, c(i))}

此代码返回:

 invalid factor level, NA generated

 In `[<-.factor`(`*tmp*`, ri, value = "AL") :

【问题讨论】:

  • 如果答案已经处理了这种情况,您应该勾选它,这样其他人就不会在寻找未回答的问题时浪费时间。

标签: r for-loop dataframe na


【解决方案1】:
> rbind(z, "AL")
  X.AL.
1    AL
> str(z)
'data.frame':   0 obs. of  0 variables
> str(rbind(z, "AL"))
'data.frame':   1 obs. of  1 variable:
 $ X.AL.: Factor w/ 1 level "AL": 1

所以在添加第一项之后,第一列是一个级别的因子,您将无法再进行 rbind 绑定,因为输入将不在级别集中。如果您在 options 中将 stringsAsFactors 设置为 FALSE(或者如果您将数据帧设置为具有字符列而不是使用默认值,那么它应该可以工作。

> options(stringsAsFactors=FALSE)
> z <- data.frame()
> str(rbind(z, "AL"))
'data.frame':   1 obs. of  1 variable:
 $ X.AL.: chr "AL"

> for (i in state.abb){z <- rbind(z, c(i))}
> str(z)
'data.frame':   50 obs. of  1 variable:
 $ X.AL.: chr  "AL" "AK" "AZ" "AR" ...

【讨论】:

  • 非常感谢!我尝试在表达式末尾添加“stringsAsFactors=FALSE”来修复,但我不知道“选项”设置。
  • 一些知识渊博的人建议使用该全局选项运行。如果在编写代码时考虑到该假设,然后将其导出到不是默认设置的站点,则往往会导致问题。
  • 我对行的 rbind 几乎完全有问题,这些行的值似乎应该是字符串,但默认情况下被视为因子。 options(stringsAsFactors=FALSE) 的解决方案解决了我的问题。我认为这应该是问题的答案。但我不确定选项(stringsAsFactors=FALSE)的其他含义是什么,它对涉及这些字符串值的统计分析有什么影响?
  • 大多数时候,期望因子的函数将以相同的方式处理字符变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多