使用 'ifelse' 修改字符串因子的内容不起作用

Revise content of string factor using 'ifelse' isn't working

Kia ora 数据科学社区,在尝试修改数据框因子的内容时,我正在努力让 ifelse 语句起作用。我正在处理 5 种不同类型的陷阱类型,但其中两种陷阱类型没有被正确概括。以下是陷阱类型和与每种类型相关的观察数量的摘要table:

 DOC150 Double (Fiordland)        DOC150 Single (ATBT) 
                     107748                       20260 
      DOC150 Single (ATBT)  DOC200 Double (Run Through) 
                        456                        2324 
     DOC200 Double (Takaka)         DOC200 Double (ZIP) 
                      23748                        2472 
     DOC200 Single (Takaka)     DOC200 Single (Takaka)  
                      11258                       23668

我需要 DOC150 Single (ATBT) 陷阱被识别为相同的并总结为如此,DOC200 Single (Takaka) 也是如此。无论出于何种原因,陷阱类型都被归纳为单独的类别;我怀疑当从更大的数据集中提取信息时,名称的间距有问题。

我尝试使用以下代码对其中一种错误的陷阱类型进行重新分类,但无济于事:类别仍然存在,但代码将所有陷阱类型从字符因子更改为数字因子,并且每个类别的最终统计结果保持不变。

Records2$TrapName<- as.character(ifelse(grepl("Single (Takaka)", Records2$TrapTypeTe), "DOC200 Single (Takaka)", Records2$TrapTypeTe))

这是生成的摘要table:

     1      2      3      4      5      6      7      8 
107748  20260    456   2324  23748   2472  11258  23668

我以为我终于明白了如何在 ifelse 语句中使用 grepl,但现在我卡住了。我知道如何在 SAS 中执行此操作,但 R 让我陷入困境。任何帮助将不胜感激。 Kia pai to ra, Doug

这是一种使用因子的方法 - 我们不小心在代码中包含了一些小写字母:

x <- c("D", "B", "E", "e", "A", "a", "E", "E", "E", "D", "E", "D", 
"d", "A", "A", "b", "D", "D", "B", "C", "e", "b", "D", "d", "D")
table(x)
x
# a A b B C d D e E 
# 1 3 2 2 1 2 7 2 5 
x <- factor(x)
levels(x)
# [1] "a" "A" "b" "B" "C" "d" "D" "e" "E"
levels(x) <- c("A", "A", "B", "B", "C", "D", "D", "E", "E")
table(x)
# x
# A B C D E 
# 4 4 1 9 7 
levels(x)
# [1] "A" "B" "C" "D" "E"

如评论中所述,问题是因为列值中有额外的 space。您可以使用 trimws 删除它并且不需要 ifelsegrepl.

Records2$TrapTypeTe <- trimws(Records2$TrapTypeTe)
#Check
table(Records2$TrapTypeTe)