0

我有一个关于 R 中的字符串操作的问题。我有一个包含两列的数据框:

NAME          DATE
xxx-test-xx   2015-02-03
Frank         2015-02-01
Steve         2014-09-31
132-test-ggg  2012-12-09

我想将NAME列中包含单词“test”的所有案例更改为一个名称 - 例如“TEST”。我准备了如下代码,但它不起作用 - 没有找到应有的情况。NAME 变量中的观察没有任何特定的模式。你能告诉我如何解决吗?

dataset$EMAIL <- as.character(dataset$EMAIL) 

for (i in 1:length(dataset)) {
  if(grepl("test", dataset$EMAIL[i], ignore.case=TRUE))  {
    dataset$EMAIL[i] <- "TEST"
  }
}
4

2 回答 2

6

当您这样做时,length(dataset)您将返回数据框中的列数,而不是行数。要修复循环,您可以执行1:nrow(dataset). 但实际上你可以在这种情况下完全摆脱for循环并做

dataset$EMAIL <- as.character(dataset$EMAIL) 
dataset$EMAIL[grepl("test", dataset$EMAIL, ignore.case=T)] <- "TEST"
于 2015-06-24T15:18:52.607 回答
4

首先,您不需要遍历列中可以依赖R向量化的所有条目。

然后你可以简单地使用gsub

gsub(".*test.*", "TEST", dataset$EMAIL)
于 2015-06-24T15:30:03.033 回答