【问题标题】:How can I Insert gsub function into read.csv function如何将 gsub 函数插入 read.csv 函数
【发布时间】:2016-12-13 14:35:57
【问题描述】:

我有一个包含逗号的 CSV 文件:“Afganis,tan” 我想用“_”替换逗号,所以我使用以下gsub statments。 但是,当我打印结果数据框时,我看到该值分为两部分:一个位于同一列(“Afganis”)中,第二个(“tan”)插入到下一列。我怎样才能克服这个问题,所以我会得到“Afganis_tan”?有没有办法将 gsub 函数插入到 read.csv 函数中? 附上我试过的相关代码。

df<- read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = "")
ind<-sapply(1:ncol(df), function(x) { class(df[,x])=="factor"})
      print(ind)
      ind<-which(ind==TRUE)
      if(length(ind)==1){

        df[,ind]<-gsub('[^a-zA-Z0-9.]',"_",as.character(df[,ind]))
        df[,ind]<-df('\\,',"_",as.character(df[,ind]))
        df[,ind]<-df(',',"_",as.character(df[,ind]))
        df[,ind]<-as.factor(df[,ind])
      }

这是输出(第 9 行有问题):

  campaign_type              country_name           transaction_type cpa_price       TIERS Year_Success_20.
1            CPM              Afgha nistan                   Domestic         0 TIER_4_Asia                0
2            CPM             Afg' hanistan                   Domestic         0 TIER_4_Asia                0
3            CPM           Afgh' (anistan) Cross Optimized Advertiser         0 TIER_4_Asia                1
4            CPM              Afgha-nistan                   Domestic         0 TIER_4_Asia                0
5            CPM         "Afghan""istan""" Cross Optimized Advertiser         0 TIER_4_Asia                0
6            CPM Afghan~!#$%^@&*()_+|istan                   Domestic         0 TIER_4_Asia                0
7            CPM               Afghanistan                   Domestic         0 TIER_4_Asia                0
8            CPM              Afghanistan.                   Domestic         0 TIER_4_Asia                0
9            CPM                   "Afghan                     istan"  Domestic 0.040995321      TIER_4_Asia
10                                                                                                          
11           CPM               Afghanistan                   Domestic         0 TIER_4_Asia                1

附件是文件的链接。 File with versions to the string "Afganistan"

【问题讨论】:

  • 您应该创建一个reproducible example 并包含示例数据。在您将数据读入df 之后,read.csv 确实与转换无关。只需包含df 的输入。你想用df('\\,',"_",as.character(df[,ind])) 做什么——你似乎把df() 作为一个函数来调用。而SPY 是从哪里来的?
  • 您可以使用 data.table 库中的 fread() 函数。可以使用终端命令而不是文件路径作为输入,并在进入的过程中应用 gsub(或 Windows 等效命令)。您还可以设置 sep2 参数来尝试检测引号分隔符。
  • @MrFlick,我按照你的建议添加了更多信息。

标签: r regex csv gsub read.csv


【解决方案1】:

如果您可以保存 CSV 文件以使用引号标识符(使用双引号分隔字段“),那么您可以避免此问题。然后 read.csv()(或我个人偏好 fread() 来自 data.table 库)可以被编程为在双引号之外查找逗号进行拆分。

您还可以在fread() 中使用终端命令作为输入,并在数据通过管道输入时使用正则表达式。

【讨论】:

  • 谢谢@Oliver Forst,很遗憾我不能使用外部库。
  • system("system command with gsub", intern = TRUE) 可以满足您的需求。否则,您可能必须简单地读入它并在 R 中对其进行操作。另外,以 'abc,def' 为例。您如何区分逗号是故意的(并且不存在空格)的情况与逗号是意外的情况并且该字段实际上应该读取“abcdef”的情况?最好的解决方案是使用不同的分隔符或带引号的标识符重新加载该文件。
  • 谢谢@Oliver Forst,感谢您的解决方法建议,我在哪里插入这行代码?
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2020-11-11
  • 2021-10-05
  • 2012-05-09
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多