有效地重命名列值

Renaming Column Values Efficiently

我试图一次重命名我的数据中的所有值,而不是逐条重命名。

现在我正在使用这段代码来执行我的更改:

INV$Classification[INV$Classification=="lay net"] <- "Illegal Lay Net"

我的数据是INV,我的列是Classification。我想找到单词 "lay net" 的所有实例并将它们替换为 "Illegal Lay Net"。我现在正在手动执行此操作,我最终可以在 excel 中执行此操作。有没有更有效的方法来做到这一点?

例如,我有以下条目:POSSIBLE ILLEGAL LAY NET 或 Lay Nets Violation,仅使用 "lay net" 查找不会发现这些条目,因此不会切换,因为此代码非常具体。

您想开始使用正则表达式。看看 gsubgrepgrepl 和类似的函数。当然这不是灵丹妙药,您仍然必须了解并确保抓住每一个案例。

这是一个示例,可以捕捉到您所说的 3 种情况:

INV$Classification[grepl("lay net", INV$Classification, ignore.case=T)] <- "Illegal Lay Net"

这是一个使用 stringr 的冗长 tidyverse 解决方案,首先转换为小写,然后测试是否包含 "lay net," 替换为新字符串(如果包含)。

library(tidyverse)
INV <- INV %>% 
  mutate(Classification = if_else(Classification %>% 
                                  tolower %>% 
                                  str_detect("lay net"),
                                  "Illegal Lay Net", Classification)