我有一个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
答案 0 :(得分:2)
如果您可以保存CSV文件以使用引号标识符(使用双引号分隔字段“),那么您可以避免此问题。然后read.csv()
(或fread()
来自{{{我个人偏好data.table
可以对1}}库进行编程,以便在双引号之外查找要分割的逗号。
您还可以在fread()
中使用终端命令作为输入,并在管道输入时对数据使用正则表达式。