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