gpt4 book ai didi

读取不以 ]dos 开头的行

转载 作者:行者123 更新时间:2023-12-02 09:20:11 26 4
gpt4 key购买 nike

我必须导入一个包含数千行的 csv 文件。在这个文件中,标题出现了好几次。此 header 以以下四个字符开头:]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 发布的方法,但我认为该文件真的很脏,在某种意义上:

  • 它是一个 csv 文件,但带有分隔符;而不是 ,(因为它是法语)。
  • 有几列有空值。
  • 也许还有未知字符(不确定)。

我收到以下错误信息:

df <- read.table(text = txt, header =FALSE) Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 1 did not have 44 elements In addition: Warning message: closing unused connection 3 (extraction.csv)

我必须用 R 编写一个程序,供对编程或数据分析一无所知的人使用。此人将定期使用该程序,以便从数据中获得一些结果。此人将无法自行清理该数据。

这是用 Excel 打开文件时的样子:

how the file looks like if you open it with Excel

最佳答案

根据示例数据,我假设您想排除以 N[ dos 开头的行。

您可以通过几个步骤在数据框中获取此数据:

  1. 使用readLines 读取数据文件。 (因为我没有文件,所以我使用了 textConnection;但您可以按如下方式使用它:readLines('name_of_your_file.txt') 读入正文)
  2. 使用 grepl 函数删除以 N[ dos 开头的行。
  3. 使用 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

关于读取不以 ]dos 开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43270789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com