我必须导入一个包含数千行的csv文件。在此文件中,标题会多次出现。此标头以以下四个字符开头:]dos
。我想读一行,不包括以]dos
开头的行。
该文件看起来像
N[ dos Date dos Heure Dos Nom du patient ex pat
N[ dos Date dos Heure Dos Nom du patient ex pat
7061283778 02-03-17 12h54 Mr MONTALDO JIMENA 02-03-17
7061283777 02-03-17 12h54 Mme MONTALDO JIMENA 03-03-17
7061283790 02-03-17 12h54 Mme MONTALDO JIMENA 02-03-17
7061283779 02-03-17 12h55 Mr MONTALDO JIMENA 02-03-17
7061300309 02-03-17 12h55 Mme MONTALDO JIMENA 02-03-17
7061294068 02-03-17 12h56 Mme MONTALDO JIMENA 03-03-17
7061283782 02-03-17 12h56 Mr MONTALDO JIMENA 02-03-17
N[ dos Date dos Heure Dos Nom du patient ex pat
7061283781 02-03-17 12h56 Mlle MONTALDO JIMENA 02-03-17
7061300311 02-03-17 12h57 Mme MONTALDO JIMENA 02-03-17
正如您所见,标题出现了三次。
我是@Jaap发布的方法,但我认为该文件非常脏,从某种意义上说:
我收到以下错误消息:
df< - read.table(text = txt,header = FALSE) 扫描错误(file = file,what = what,sep = sep,quote = quote,dec = dec,: 第1行没有44个元素 另外:警告信息: 关闭未使用的连接3(extraction.csv)
我必须在R中准备一个程序,供那些对编程或数据分析一无所知的人使用。此人将定期使用该程序,以便从数据中获得一些结果。此人将无法自行清理该数据。
如果您使用Excel打开文件,这就是文件的样子:
答案 0 :(得分:5)
根据示例数据,我想您要排除以N[ dos
开头的行。
您可以通过几个步骤在数据框中获取此数据:
readLines
读取数据文件。 (因为我没有文件,我使用了textConnection
;但你可以按照以下方式使用它:readLines('name_of_your_file.txt')
来阅读文字)N[ dos
- 功能删除以grepl
开头的行。read.table
。完整代码:
txtcon <- textConnection('N[ dos Date dos Heure Dos Nom du patient ex pat
N[ dos Date dos Heure Dos Nom du patient ex pat
7061283778 02-03-17 12h54 Mr MONTALDO JIMENA 02-03-17
7061283777 02-03-17 12h54 Mme MONTALDO JIMENA 03-03-17
7061283790 02-03-17 12h54 Mme MONTALDO JIMENA 02-03-17
7061283779 02-03-17 12h55 Mr MONTALDO JIMENA 02-03-17
7061300309 02-03-17 12h55 Mme MONTALDO JIMENA 02-03-17
7061294068 02-03-17 12h56 Mme MONTALDO JIMENA 03-03-17
7061283782 02-03-17 12h56 Mr MONTALDO JIMENA 02-03-17
N[ dos Date dos Heure Dos Nom du patient ex pat
7061283781 02-03-17 12h56 Mlle MONTALDO JIMENA 02-03-17
7061300311 02-03-17 12h57 Mme MONTALDO JIMENA 02-03-17')
txt <- readLines(txtcon)
txt <- txt[!grepl(pattern = '^N\\[ dos', txt)]
df <- read.table(text = txt, header = FALSE)
这导致以下数据帧:
> df
V1 V2 V3 V4 V5 V6 V7
1 7061283778 02-03-17 12h54 Mr MONTALDO JIMENA 02-03-17
2 7061283777 02-03-17 12h54 Mme MONTALDO JIMENA 03-03-17
3 7061283790 02-03-17 12h54 Mme MONTALDO JIMENA 02-03-17
4 7061283779 02-03-17 12h55 Mr MONTALDO JIMENA 02-03-17
5 7061300309 02-03-17 12h55 Mme MONTALDO JIMENA 02-03-17
6 7061294068 02-03-17 12h56 Mme MONTALDO JIMENA 03-03-17
7 7061283782 02-03-17 12h56 Mr MONTALDO JIMENA 02-03-17
8 7061283781 02-03-17 12h56 Mlle MONTALDO JIMENA 02-03-17
9 7061300311 02-03-17 12h57 Mme MONTALDO JIMENA 02-03-17
查看结果数据框,我想您希望将一些列放在一列中。可能的方法可能是:
df2 <- data.frame(id = df$V1,
datetime1 = strptime(paste(df$V2, df$V3), '%d-%m-%y %Hh%M'),
datetime2 = as.Date(df$V7, '%d-%m-%y'),
name = paste(df$V4, df$V5, df$V6))
导致:
> df2
id datetime1 datetime2 name
1 7061283778 2017-03-02 12:54:00 2017-03-02 Mr MONTALDO JIMENA
2 7061283777 2017-03-02 12:54:00 2017-03-03 Mme MONTALDO JIMENA
3 7061283790 2017-03-02 12:54:00 2017-03-02 Mme MONTALDO JIMENA
4 7061283779 2017-03-02 12:55:00 2017-03-02 Mr MONTALDO JIMENA
5 7061300309 2017-03-02 12:55:00 2017-03-02 Mme MONTALDO JIMENA
6 7061294068 2017-03-02 12:56:00 2017-03-03 Mme MONTALDO JIMENA
7 7061283782 2017-03-02 12:56:00 2017-03-02 Mr MONTALDO JIMENA
8 7061283781 2017-03-02 12:56:00 2017-03-02 Mlle MONTALDO JIMENA
9 7061300311 2017-03-02 12:57:00 2017-03-02 Mme MONTALDO JIMENA