【问题标题】:How to change part of string in R [duplicate]如何更改R中的部分字符串[重复]
【发布时间】:2015-06-24 15:13:26
【问题描述】:

我有一个关于 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"
  }
}

【问题讨论】:

  • 不管是什么解决方案(提供的两个看起来不错)在导入数据时不要忘记设置stringsAsFactors = F,否则(不是全部)提供的解决方案会造成麻烦。

标签: r string replace statistics grepl


【解决方案1】:

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

dataset$EMAIL <- as.character(dataset$EMAIL) 
dataset$EMAIL[grepl("test", dataset$EMAIL, ignore.case=T)] <- "TEST"

【讨论】:

  • 非常感谢,这很有帮助!
【解决方案2】:

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

那么你可以简单地使用gsub

gsub(".*test.*", "TEST", dataset$EMAIL)

【讨论】:

  • 谢谢,效果很好!
猜你喜欢
  • 2014-06-18
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 2015-10-06
相关资源
最近更新 更多