【问题标题】:Create dictionary and replace by it latin words in phrases in R创建字典并用它替换R中短语中的拉丁词
【发布时间】:2018-10-12 10:52:38
【问题描述】:

与此类似的帖子 Create dictionary and replace by it latin words in R。 Moody_Mudskipper 的解决方案很好,但是 让我们检查一下这句话

2049750 TESS чай солид     450mg

等等…… 确实我必须得到

2049750 ТЕСС чай солид     450mg

但是

output <- with(lapply(dict,as.character), new[match(tolower(input),old)])
output

在我只得到 NA 之后。 怎么了?

 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

_我的字典

dict <- structure(list(
  old = structure(c(2L, 1L), .Label = c("mag", "tess"),class = "factor"),
  new = structure(c(2L, 1L), .Label = c("маг", "тесс"), class = "factor")),
  .Names = c("old", "new"), class = "data.frame", row.names = c(NA, -2L))

输入

input<-("2049750 TESS чай солид     450mg")

想要的输出

2049750 ТЕСС чай солид     450mg

现在我得到了输出

1.Na
2.Na
...
35000 NA

【问题讨论】:

  • 你怎么能得到这么多NAs?
  • @AntoniosK,我有 35000 行,所以在使用 dict 之后,我得到 35000 行,NA
  • 您可以使用dput() 发布newold 的样本吗?
  • @jdobres,我做到了,请检查
  • 当您执行您发布的示例时,为什么不发布您得到的输出?所以,想要帮助的人可以准确地复制这个问题......

标签: r string dplyr


【解决方案1】:

你可以试试这个:

library(stringr)
dict2 <- setNames(toupper(as.character(dict$new)), 
                  paste0("\\b",toupper(dict$old),"\\b")) 
str_replace_all(input, dict2)
# [1] "2049750 ТЕСС чай солид     450mg"

【讨论】:

  • 你能把所有超过 3 位数的号码都删除吗?所以这个 2049750 必须删除。并且必须留下 450 :)
  • 如果它只是在字符串的开头使用 gsub("^\\d\\d\\d+? ","",input) 否则在存档中搜索或提出新问题 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
相关资源
最近更新 更多