美文网首页
技术日记_备查:R中的缺失值替换

技术日记_备查:R中的缺失值替换

作者: 想好的笔名被占用 | 来源:发表于2020-04-10 13:35 被阅读0次
关键字:R; 缺失值替换; collostruction analysis; linguistics

背景:
开题pilot study想用 collostruction analysis(或distinctive collexeme analysis,DCA,本质为Fisher exact test)看看to-infinitival complement在两种英语变体(American English和Singapore English)和哪些matrix verbs联系紧密,遂用ICE-USA和ICE-Singapore作为原始语料,以#lancbox为工具检索抽取所需语料,并使用R做统计分析。

问题描述:
提取所需数据后,将数据放在excel中做调整,并保存为xlsx,用R中的openxlsx读出数据,cbind()其中两列到新变量a,此时这两列数据就变成了factor类型。如法炮制变量bmerge()到变量c,想用c[is.na(c)] <- 0替换掉空缺值时报错如下:

Warning message:
In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
  invalid factor level, NA generated

原因及解释:
从网上查找后初步得出原因,是由于在cbind()一步中将两列原始数据变成了factor类型,0不属于自动判定的level。

详细原因待补充。

解决方法:
对于merge()后的变量c,先将其中的列从factor类型转换成需要的类型再进行缺失值的替换操作,比如在当前场景(collostruction analysis)下,需要(1)将第一列数据(collocations)转换为为字符类型;(2)将第二、三列数据(frequency)转换为数字类型(数据示例如下):

变量c的部分数据(此时三列数据还未处理,都是factor类型)
    collocations   USAfrequency  SAPfrequency
1         accord            10             8
2          agree            16            14
3            aim             5            13
4          allow            13            25
5         appear            31            41
6          apply             6             7
7            ask            16            16
8         assign             5          <NA>
9        attempt            48            19
10            be             0           304
11         begin            85            48
12       believe            10            21
13         build             6          <NA>
14     calculate             5          <NA>
15          call             6             6

(1)将第一列转换为字符类型:
c$collocations <- as.character(c$collocations)
(2)将第二列转换为数字类型,此时需注意不能直接用as.numeric(),因为R会按照原先factor的levels来赋予数值,第一个level变成数字1,第二个level变成数字2......因此为了保证数据中数字不变化只变换类型,需要先转换为字符再转换为数字:
c$USAfrequency <- as.numeric(as.character(c$USAfrequency))
第三列同上。

至此,c中的缺失值NA便可使用c[is.na(c)] <- 0来替换了。

反思:
避免这个问题的方法有很多种,比如所需数据保存为.csv,在R中用read.csv()时将参数stringAsFactors设置为FALSE。或者在建立dataframe的时候设置同样的参数,都可以避免上述问题。
本文档用于备查,要是能帮到你就更好啦~

相关文章

网友评论

      本文标题:技术日记_备查:R中的缺失值替换

      本文链接:https://www.haomeiwen.com/subject/cnilmhtx.html