在R中从data.frame中删除引号("")

15
我有一个数据框,其中包含多个列,所有列都是字符类型。所有值都用双引号括起来,我想要移除这些引号。
例子:
df1      df2
"1203"   "Name1"
"2304"   "Name2"

2
你确定你有一个 data.frame 而不是一个 matrix 吗? - A5C1D2H2I1M1N2O1R2T1
如果您只想删除引号,请查看 noquote 函数。 - Jota
1
如果我省略它,我就无法读取完整的文件并收到警告消息: 在scan(file,what,nmax,sep,dec,quote,skip,nlines,na.strings, EOF在引用字符串内 - BigDataScientist
然后,如果您的文件中存在嵌套引号或未关闭的引号等荒谬的内容,您可能需要在读取文件之前进行修复。 - joran
数据框包含数字和字符。我想分析文件并运行一些报告。 - BigDataScientist
3个回答

20
数据框的print()方法有一个quote=选项,可以将其设置为FALSE
print.data.frame(data.frame(x=c("Hello", "World")), 
                 quote=FALSE)
#       x
# 1 Hello
# 2 World

另请参见?print.data.frame(=帮助)

编辑:

关于下面评论中的 dput 数据:

as.data.frame(sapply(df, function(x) gsub("\"", "", x)))

df <- data.frame(df=c("1203", "2304"), df2=c("Name1", "Name2"), stringsAsFactors=FALSE); print(df, quote=FALSE); print(df, quote=TRUE) 运行正常。 - lukeA
使用 dput() 发布您的数据框,以便其他人可以检查它。 - lukeA
结构(list(Col1 = c(""2515"", ""3348"", ""3370""), Col2 = c(""06/25/2013"", ""12/26/2013"", ""12/30/2013"" )), .Names = c("Col1", "Col2"), row.names = c(NA, 3L), class = "data.frame") - BigDataScientist
1
在您的情况下,引号是字符向量/字符串本身的一部分。 print(as.data.frame(sapply(df,function(x) gsub("\"","",x)))) 删除并打印它们。 - lukeA

1

更新dplyr 1.0.0

自从dplyr 1.0.0版本以来,你可以使用来自purrr的新across语法,这使得对于我们许多人来说更易读。

df <- structure(list(Col1 = c("\"2515\"", "\"3348\"", "\"3370\""), Col2 = c("\"06/25/2013\"", "\"12/26/2013\"", "\"12/30/2013\"" )), .Names = c("Col1", "Col2"), row.names = c(NA, 3L), class = "data.frame") 

df
    Col1         Col2
1 "2515" "06/25/2013"
2 "3348" "12/26/2013"
3 "3370" "12/30/2013"

df %>% 
  mutate(across(
    everything(),
    ~ map_chr(.x, ~ gsub("\"", "", .x))
  ))

  Col1       Col2
1 2515 06/25/2013
2 3348 12/26/2013
3 3370 12/30/2013

这种across语法的优点在于它不仅易读,而且非常灵活。您可以使用一系列其他方法来引用列,而不是使用everything()来表示所有列,例如:
  • 按名称(Col1, Col2
  • 按数据类型(例如is.numericis.character
  • 通过其他tidyselect选择帮助器(例如starts_with("Col")contains("Col"

0

LukeA的答案将我的整个数据框转换为字符格式,所以我实现了这个修改,只修改字符类别的列:

character_cols = which(sapply(x, class) == 'character')

for(i in 1:length(character_cols)) {
  a = character_cols[i]
  x[,a] = gsub("\"", "", x[,a])
}     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接