我有一个看起来像这样的数据框(抱歉,我无法用代码复制实际数据框,因为双引号没有显示.Vx是变量):
V1, V2, V3, V4
home, 15, "grand", terminal,
"give", 32, "cuz", good,
"miles", 5, "before", ten,
yes, 45, "sorry," fine
问题:我如何能够修复我使用read.csv函数导入的整个数据框的双引号问题,其中所有双引号都被删除了?
我正在寻找的是与FIND + REPLACE相同的excel或单词:找到双引号,并替换为空。
注意:
1)我通过运行is.data.frame()函数确认它是一个数据框
2)实际数据框有数百列,因此遍历每一列并声明其列类型是不可行的
3)我尝试使用以下内容,但它不起作用:as.data.frame(sapply(my_data, function(x) gsub("\"", "", x)))
4)我通过在数据框上使用sql进行测试,确认这不是一个简单的打印问题。除非我使用LIKE而不是=
提前致谢!
7/7/15编辑01:根据@alexforrence的要求,这里是几列的d(put)输出:
billing_first_name billing_last_name billing_company 3 NA 4 Peldi Guilizzoni NA 5 NA 6“James Andrew”Angus NA 7 NA 8 Nova Spivack NA
答案 0 :(得分:0)
以下是使用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
答案 1 :(得分:0)
您可以使用nchar()
识别双引号。
a <- ""
nchar(a)==0
[1] TRUE
答案 2 :(得分:0)
除了上面我遇到了一个非常奇怪的问题。使用这些技巧,我写了这个非常短的程序:
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
读取虚拟csv:
Number;Name
X-23;This is some „Test
K-33.01;And another „Test
我的目标是在测试之前摆脱这个双引号。然而,到目前为止这不起作用。这是因为这个双引号。
如果我选择替换字符的不同部分,它可以使用read.csv2和上面的类定义,或者直接使用gsub将其保存到temp变量中。
现在真正奇怪的是以下内容。运行程序后,我手动将两行“temp&lt; - gsub”和“print(temp)”复制到命令行中:
> 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
但是如果我在程序中重复此命令并再次运行它,它就不起作用。我真的不知道为什么。