【问题标题】:Removing the special symbols in data.frame column values删除 data.frame 列值中的特殊符号
【发布时间】:2017-05-05 12:00:24
【问题描述】:

我有两个数据框,每个数据框都有一个列名称

df1:

name  
@one2  
!iftwo  
there_2_go  
come&go

df1 = structure(list(name = c("@one2", "!iftwo", "there_2_go", "come&go")),.Names = c("name"), row.names = c(NA, -4L), class = "data.frame")

df2

name  
One2  
IfTwo#  
there-2-go  
come.go



df2 = structure(list(name = c("One2", "IfTwo#", "there-2-go", "come.go")),.Names = c("name"), row.names = c(NA, -4L), class = "data.frame")

现在比较两个数据框的不等式很麻烦,因为使用了特殊符号%in%。使用stringR 删除特殊符号可能很有用。但是我们如何才能将stringR 函数与%in% 一起使用并显示它们之间的不匹配

已经将mutate()全部转换为小写toLower()如下

df1<-mutate(df1,name=tolower(df1$name))
df2<-mutate(df2,name=tolower(df2$name))

比较的当前输出:

df2[!(df2 %in% df1),]
[1] "one2"       "iftwo#"     "there-2-go" "come.go" 

内容基本相同但带有特殊符号的预期输出:

 df2[!(df2 %in% df1),]
 character(0)

问题:我们如何忽略Frame内容中的符号

【问题讨论】:

  • 您是否错误地附加了两次 df 而不是 df 和 df2?另外你的预期输出是什么?
  • 哦,这是从 R 控制台复制到堆栈溢出时的错误
  • 现在更正了@Sotos
  • @zx8754 没觉得对这个很有用

标签: r dplyr tidyr stringr


【解决方案1】:

这是在一个函数中,

f1 <- function(df1, df2){
  i1 <- tolower(gsub('[[:punct:]]', '', df1$name))
  i2 <- tolower(gsub('[[:punct:]]', '', df2$name))
  d1 <- sapply(i1, function(i) grepl(paste(i2, collapse = '|'), i))
  return(!d1)
}

f1(df, df2)
#    one2    iftwo there2go   comego 
#   FALSE    FALSE    FALSE    FALSE 

#or use it for indexing,

df2[f1(df, df2),]
#character(0)

【讨论】:

  • 这个很棒@Sotos,几乎是我的要求,但是如果帧中出现以下类似的特殊符号怎么样:10��NORTH,它会抛出错误tolower(gsub('[ [:punct:]]', .....
  • 也许this 可以帮助...?我无法测试,因为您没有提供这些案例的数据
  • 即使我没有这样的数据 :) 很好奇。这个 gsub 今天对我来说是全新的东西,谢谢。将探索更多!
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 2020-11-19
  • 2016-11-30
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多