我在R中组合了几个大型数据集,其中缺失值用“。”表示。我想做一个批量查找和替换“。”在整个数据集中使用“NA”(有大约35列,数十万行)。我已在单个列中尝试了ifelse语句,但列的类在此过程中因因子而异。当我转换回因子时,值已经改变。
示例data.frame:
SHARP_ID YEAR CAL_DATE JUL_DAY ST_TIME OBS_INIT NOISE
23971_p7 2012 28-Jul-12 210 837 RP_CAW 1
23971_p7 2012 2-Jun-12 154 735 RP_CAW 4
23971_p5 2012 28-Jul-12 210 855 RP_CAW 1
23971_p10 2012 28-Jun-12 180 1012 RP_CAW 3
23971_p10 2012 28-Jul-12 210 813 RP_CAW 1
23971_p2 2012 28-Jun-12 180 856 RP_CAW .
23971_p2 2012 28-Jun-12 180 856 RP_CAW 2
23971_p2 2012 28-Jul-12 210 921 RP_CAW 1
23971_p5 2012 2-Jun-12 154 753 RP_CAW .
23971_p5 2012 2-Jun-12 154 753 RP_CAW .
我尝试过使用ifelse,lapply和gsub,但是在所有情况下,列的模式(在本例中为NOISE)会因素而异。当我尝试将其切换回因子时,值会有所不同。例如:
> levels(d$NOISE)
[1] "." "0" "1" "2" "3" "4"
> class(d$NOISE)
[1] "factor"
> d$NOISE=ifelse(d$NOISE==".",as.factor("NA"),as.factor(d$NOISE))
> class(d$NOISE)
[1] "integer"
> d=RP12[,1:24]
> levels(d$NOISE)
[1] "." "0" "1" "2" "3" "4"
> class(d$NOISE)
[1] "factor"
> d$NOISE=ifelse(d$NOISE==".",as.factor("NA"),as.factor(d$NOISE))
> class(d$NOISE)
[1] "integer"
> d$NOISE=as.factor(d$NOISE)
> class(d$NOISE)
[1] "factor"
> levels(d$NOISE)
[1] "1" "2" "3" "4" "5" "6"
我需要对此数据集中的大量值进行全面查找/替换,并且大多数时候它们将等同于Excel中的特定于单元格的查找和替换。这些数据库太大了,无法在Excel中处理,所以我在这里。我是R的数据管理新手,所以请耐心等待,非常感谢。
答案 0 :(得分:2)
你的事情过于复杂:
d[d == "."] <- NA
如果不清楚,这里发生的是R检查数据帧中的每个值是否等于"."
。然后,它会返回与原始尺寸相同的数据框,在满足条件的任何地方都会显示TRUE
值,而{(1}}则不会。然后,您可以使用此数据框指示应替换访问原始值的哪些值,在这种情况下将替换为False
。
无论班级如何,这都应该有效; NA
和factor
向量都将返回character
并在适当的时候进行修改,而其他类将返回TRUE
并传递。
修改:可重现的演示
FALSE