在矩阵中查找元素并替换

时间:2015-05-18 03:02:14

标签: r matrix dataframe

我有调查结果的数据框架。答案是葡萄牙语,我需要用“Ns / Nr”代替一些答案,例如“NãoSabe”和“Nãococordeu”。矩阵的每列都是因子类。 我可以针对任何标签推广此程序吗? 我试过这样的事情

mydata[mydata %in% c("Não sabe", "Não respondeu")] <- "Ns/Nr"

但是,它不起作用。事实上,当我尝试时:

mydata[mydata %in% c("Não sabe", "Não respondeu")]<- "Ns/Nr" 

没有错误,但是,当我这样做时

freq(mydata$Q_9) 

没有“Ns / Nr”标签,其他频率保持不变。而且,当我做的时候

mydata[mydata == "Não respondeu"]<- "Ns/Nr" 

有像

这样的警告
In `[<-.factor`(`*tmp*`, thisvar, value = "Ns/Nr") :
invalid factor level, NA generated

在这种情况下,当我做freq(mydata $ Q_9)时,“Nãoresponsedeu”的频率为零,NA取旧旧“Nãoresponsedeu”的频率。

1 个答案:

答案 0 :(得分:1)

在替换为ie之前,您可以将'factor'类转换为'character'。

 mydata[] <- lapply(mydata, as.character)
 mydata[] <- lapply(mydata, function(x) {
        x[ x %in%c("Não sabe", "Não respondeu")] <- 'Ns/Nr'
         x})

或者,如果没有转换为“字符”类,我们可以使用recode中的car。优点是您可以在'factor'列中更新新的级别'Ns / Nr',同时删除已更换的级别。

 library(car)
 mydata[] <- lapply(mydata, function(x) 
         recode(x, "c('Não sabe', 'Não respondeu')='Ns/Nr'") )