更换字符串上的字符时出错

时间:2017-05-06 10:58:03

标签: r

我正在阅读一个具有以下结构的文件:

[1111111]aaaa;bbbb;cccc
[2222222]dddd;ffff;gggg

我希望有一个这样的数据框:

Column A  Column B  Column C  Column D
1111111    aaaa       bbbb      cccc
2222222    dddd       ffff      gggg

所以我需要分手;并替换所有[]

所以这是我的代码:

读取文件

df<-read.csv("file.csv",sep=";")

替换[]

df_V1 <- gsub(pattern="[",replacement="",df$V1)  #ERROR HERE!
df_V1 <- gsub(pattern="]",replacement=";",df$V1) #Replace the ] to ;

然后合并在一起

df_V1 <- do.call(rbind.data.frame,strsplit(df_V1,split=";"))
Data<- cbind(
                df_V1,
                df[,c(2:ncol(df))])

这是我的输出

View(Data)

 Column A  Column B  Column C  Column D
 [1111111    aaaa       bbbb      cccc
 [2222222    dddd       ffff      gggg

并且不知道为什么第一个[不能被替换,我已经尝试使用gsub并删除字符串的第一个字符,但似乎没有解决它。有什么想法吗?

感谢您的时间

2 个答案:

答案 0 :(得分:3)

我们可以先使用readLines阅读数据,然后使用gsub更改字符串,然后使用read.csv

阅读
read.csv(text=sub(";", "", gsub("[][]", ";", lines)), 
   sep=";", header=FALSE, col.names = paste0("Column", LETTERS[1:4]), stringsAsFactors=FALSE)
#  ColumnA ColumnB ColumnC ColumnD
#1 1111111    aaaa    bbbb    cccc
#2 2222222    dddd    ffff    gggg

数据

lines <- readLines("file1.txt")

答案 1 :(得分:1)

如果列的长度确实固定,那么库读取器中的read_fwf非常有用。

library(readr)
read_fwf(
"[1111111]aaaa;bbbb;cccc
[2222222]dddd;ffff;gggg
", fwf_cols("Column A"=c(2,8), "Column B"=c(10,13), "Column C"=c(15,18), "column D"=c(20,23)))

#    `Column A` `Column B` `column C` `Column D`
#        <int>      <chr>      <chr>      <chr>
# 1    1111111       aaaa       bbbb       cccc
# 2    2222222       dddd       ffff       gggg