用另一个值替换数据框中的因子值

时间:2015-03-28 08:47:06

标签: r

我有一个数据框(df),其中包含以下示例数据:

          state.ut      district  year   AA        BB       CC
   1 ANDHRA PRADESH     ADILABAD  2001   50        30       16
   2 ANDHRA PRADESH     ANANTAPUR 2001   23        30       7
   3 ANDHRA PRADESH     CHITTOOR  2001   27        34       14
   4 ASSAM              GUWAHTI   2001   20        20       17
   5 ASSAM              JORHAT    2001   23        26       12
   6 DELHI              NEW DELHI 2001   10        20       23

我想替换ANDHRA PRADESH,它在Andhra Pradesh的数据框中出现。 ANDHRA PRADESH出现在数据框的许多地方,但仅在一列(state.ut)中,但不在其他列中。

以下R代码出错:

> df$state.ut[df$state.ut=="ANDHRA PRADESH"]<-"Andhra Pradesh"
Warning message:
In `[<-.factor`(`*tmp*`, df$state.ut == "ANDHRA PRADESH",  :
  invalid factor level, NA generated

我无法理解错误的原因。将不胜感激指导。

1 个答案:

答案 0 :(得分:2)

您可以直接更改相关因子水平,只需要确定它在因子水平向量中的位置(此处位于位置1):

> levels(df$state.ut)
[1] "ANDHRA PRADESH" "ASSAM"          "DELHI"         
> levels(df$state.ut)[1] <- "Andrha Pradesh"
> df
        state.ut  district year AA BB CC
1 Andrha Pradesh  ADILABAD 2001 50 30 16
2 Andrha Pradesh ANANTAPUR 2001 23 30  7
3 Andrha Pradesh  CHITTOOR 2001 27 34 14
4          ASSAM   GUWAHTI 2001 20 20 17
5          ASSAM    JORHAT 2001 23 26 12
6          DELHI NEW DELHI 2001 10 20 23

班级factor的变量具有levels属性,其中存储了因子(例如&#34; Andra Pradesh&#34;和#34; ASSAM&#34;)。您可以在变量上使用levels()来查看因子变量的级别。您可以将已定义的任何级别分配给该变量,但不能使用&#34; new&#34; (未定义)因子水平。所以在你的情况下&#34; Andra Pradesh&#34;是一个新的(未定义的)因子水平,你必须首先告诉R,这现在是因子水平的一部分。事实上,这是一个特例,因为你想用新的替换现有因子级别(&#34; ANDRA PRADESH&#34;)的所有出现。这就是为什么你可以简单地用新的因子级别替换旧的因子级别。否则,你必须定义&#34; Andra Pradesh&#34;作为额外的因素水平。