如何将gsub函数插入read.csv函数

时间:2016-12-13 14:35:57

标签: r regex csv gsub read.csv

我有一个CSV文件,里面有逗号值:" Afganis,tan" 我想用" _"替换逗号。所以我使用以下gsub个语句。 但是,当我打印结果数据框时,我发现该值分为两部分:一部分在同一列(" Afganis"),第二部分(" tan")被插入下一栏。我怎样才能克服这个问题所以我会得到#Af; 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"

1 个答案:

答案 0 :(得分:2)

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

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