我正在阅读一个具有以下结构的文件:
[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并删除字符串的第一个字符,但似乎没有解决它。有什么想法吗?
感谢您的时间
答案 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