将字符重命名为另一列R的条件

时间:2014-04-09 15:35:54

标签: r

我想根据下一栏中的数据替换列中的一些标签。我在SO上找到了几种方法,但它们没有用。

基本上如果“plot”是11,我希望“trt”列读取“SC”(现在它读取S2或C2)。

我试过

cn[cn$plot == 11, "trt"]="SC"
cn$trt[cn$plot == "11"]<-"SC"

但是我得到了

Warning message:
In `[<-.factor`(`*tmp*`, cn$plot == 11, value = c(NA, NA, NA, NA,  :
invalid factor level, NA generated

表示第一个和

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = c("SC", "SC", "SC", "SC",  :
  invalid factor level, NA generated

第二个。

我已尝试过11 as.factoras.numeric

1 个答案:

答案 0 :(得分:1)

这基本上意味着您正在尝试在level变量(本例中为factor中的一列)中data.frame分配level as.character不存在。

最简单的解决方案是在factor向量上使用A <- factor(c("A", "B", "C", "D")) B <- as.character(A) A # [1] A B C D # Levels: A B C D B # [1] "A" "B" "C" "D" A[A == "C"] <- "E" # Warning message: # In `[<-.factor`(`*tmp*`, A == "C", value = "E") : # invalid factor level, NA generated A <- factor(c("A", "B", "C", "D")) levels(A)[which(levels(A) == "C")] <- "E" A # [1] A B E D # Levels: A B E D B[B == "C"] <- "E" B # [1] "A" "B" "E" "D"

这是一个简单的例子:

{{1}}