删除 data.frame 列值中的特殊符号
Removing the special symbols in data.frame column values
我有两个数据框,每个数据框都有一个名称列
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内容中的符号
这里是在一个函数中,
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)
我有两个数据框,每个数据框都有一个名称列
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内容中的符号
这里是在一个函数中,
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)