如何在R数据帧中查找和替换双引号
我有一个这样的数据帧(抱歉,我不能用代码复制实际的数据帧,因为双引号没有显示。Vx是变量): 问题:如何解决使用read.csv函数导入的整个数据帧的双引号问题,其中所有双引号都已删除 我要找的是excel或word中的FIND+REPLACE:找到双引号,然后替换为nothing 注: 1) 我通过运行is.data.frame()函数确认它是一个数据帧 2) 实际的数据帧有数百列,因此遍历每一列并声明它所属的列类型是不可行的 3) 我试着使用以下命令,但没有成功:如何在R数据帧中查找和替换双引号,r,quotes,gsub,R,Quotes,Gsub,我有一个这样的数据帧(抱歉,我不能用代码复制实际的数据帧,因为双引号没有显示。Vx是变量): 问题:如何解决使用read.csv函数导入的整个数据帧的双引号问题,其中所有双引号都已删除 我要找的是excel或word中的FIND+REPLACE:找到双引号,然后替换为nothing 注: 1) 我通过运行is.data.frame()函数确认它是一个数据帧 2) 实际的数据帧有数百列,因此遍历每一列并声明它所属的列类型是不可行的 3) 我试着使用以下命令,但没有成功:as.data.frame(
as.data.frame(sappy(我的数据,函数(x)gsub(“\”,“”,x))
4) 通过在数据框上使用sql进行测试,我确认这不是一个简单的打印问题。除非我使用LIKE而不是=
提前谢谢
2015年7月7日编辑01:根据@alexforrence的要求,以下是几列的d(put)输出:
帐单名帐单姓帐单公司
3 NA
4 Peldi Guilizzoni NA
5 NA
6“詹姆斯·安德鲁”安格斯·纳
7 NA
8 Nova Spivack NA这里有一个使用
dplyr
和stringr
的解决方案。请注意,纯数字列之后将是字符列。从您的描述中,我不清楚是否有纯数字列如果有列,那么您可能希望将它们单独处理,或者在以后将它们转换回数字
require(dplyr)
require(stringr)
df <- data.frame(V1=c("home", "\"give\"", "\"miles\"", "yes"),
V2=c(15, 32, 5, 45),
V3=c("\"grand\"", "\"cuz\"", "\"before\"", "\"sorry\""),
V4=c("terminal", "good", "ten", "fine"))
df
## V1 V2 V3 V4
## 1 home 15 "grand" terminal
## 2 "give" 32 "cuz" good
## 3 "miles" 5 "before" ten
## 4 yes 45 "sorry" fine
df %>% mutate_each(funs(str_replace_all(., "\"", "")))
## V1 V2 V3 V4
## 1 home 15 grand terminal
## 2 give 32 cuz good
## 3 miles 5 before ten
## 4 yes 45 sorry fine
require(dplyr)
要求(stringr)
df%每个变异(funs(str替换所有(,“\”,“))
##V1 V2 V3 V4
##1家15大航站楼
##2给32个cuz好
##10点前5分3英里
##4是的45对不起,很好
您可以使用nchar()
识别双引号
a除上述问题外,我还遇到了一个非常奇怪的问题。利用这些技巧,我编写了一个非常简短的程序:
setClass("char.with.deleted.quotes")
setAs("character", "char.with.deleted.quotes",
function(from) as.character(gsub('„',"xxx", as.character(from), fixed = TRUE)))
TMP = read.csv2("./test.csv", header=TRUE, sep=";", dec=",",
colClasses = c("character","char.with.deleted.quotes"))
temp <- gsub('„', "xxx", TMP$Name, fixed=TRUE)
print(temp)
它读取虚拟csv:
Number;Name
X-23;This is some „Test
K-33.01;And another „Test
我的目标是在单词测试之前去掉这个双引号。然而,这到目前为止还不起作用。这是因为这个双引号
相反,如果我选择替换字符的不同部分,它可以使用read.csv2和上面的类定义,或者直接使用gsub将其保存到temp变量中
现在真正奇怪的是以下几点。运行程序后,我复制了两行“temp”,您可以使用dput()
,例如dput(head(df))
,为我们提供data.frame的子集。然后将输出粘贴为对您的问题的编辑。或者对于较少的列,dput(head(df[,1:n])
,n为列数。@克劳斯·威尔克:我不想手动修复变量,因为在一个文件中有数百个这样的情况。我希望应用一个函数,可以将其应用于我正在处理的所有文件。@克劳斯·威尔克:感谢您的帮助!我所说的“3”是指我尝试了。。。但是它不起作用”就是代码运行良好,没有错误,但是R对象仍然在相同的观察结果中显示相同的引号。我不能给你dput(head(df))的完整输出,因为它太长了,并且没有字符了。如果我给你一些我注意到这个问题的地方,怎么样?这里有一些:billing_address1=c(NA,“\“504 Lavaca\”,NA,NA,NA,“\”60 Hurantario St.\”,账单地址2=c(NA,“\”Suite 1000\”,NA,NA,NA,“\”Suite 201\”,…..class=“data.frame”)这是否与某些观察结果之间是带有字符的字符串这一事实有关?在这种情况下,空间?我注意到了这些数据中的模式。很抱歉,在您提供完整且可复制的问题描述之前,我无法进一步提供帮助。
setClass("char.with.deleted.quotes")
setAs("character", "char.with.deleted.quotes",
function(from) as.character(gsub('„',"xxx", as.character(from), fixed = TRUE)))
TMP = read.csv2("./test.csv", header=TRUE, sep=";", dec=",",
colClasses = c("character","char.with.deleted.quotes"))
temp <- gsub('„', "xxx", TMP$Name, fixed=TRUE)
print(temp)
> source('test.R')
[1] "This is some „Test" "And another „Test"
[1] " "
Number Name
1 X-23 This is some „Test
2 K-33.01 And another „Test
Number;Name
X-23;This is some „Test
K-33.01;And another „Test
> source('test.R')
[1] "This is some „Test" "And another „Test"
[1] "This is some „Test" "And another „Test"
[1] " "
Number Name
1 X-23 This is some „Test
2 K-33.01 And another „Test
>
> temp <- gsub('„', "xxx", TMP$Name, fixed=TRUE)
> print(temp)
[1] "This is some xxxTest" "And another xxxTest"
> TMP$Name <- gsub('„', "xxx", TMP$Name, fixed=TRUE)
> print(TMP)
Number Name
1 X-23 This is some xxxTest
2 K-33.01 And another xxxTest