我有调查结果的数据框架。答案是葡萄牙语,我需要用“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”的频率。
答案 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'") )