有效地重命名列值
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" 查找不会发现这些条目,因此不会切换,因为此代码非常具体。
您想开始使用正则表达式。看看 gsub
、grep
、grepl
和类似的函数。当然这不是灵丹妙药,您仍然必须了解并确保抓住每一个案例。
这是一个示例,可以捕捉到您所说的 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)
我试图一次重命名我的数据中的所有值,而不是逐条重命名。
现在我正在使用这段代码来执行我的更改:
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" 查找不会发现这些条目,因此不会切换,因为此代码非常具体。
您想开始使用正则表达式。看看 gsub
、grep
、grepl
和类似的函数。当然这不是灵丹妙药,您仍然必须了解并确保抓住每一个案例。
这是一个示例,可以捕捉到您所说的 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)