我有一个数据框(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
我无法理解错误的原因。将不胜感激指导。
答案 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;作为额外的因素水平。