如何在导入 R 之前预处理 CSV 文件?

Posted

技术标签:

【中文标题】如何在导入 R 之前预处理 CSV 文件?【英文标题】:How to pre-process a CSV file before importing into R? 【发布时间】:2021-01-28 07:59:16 【问题描述】:

我有一个这样的 CSV 文件:

C, Comment1
C, Comment2
H, col_1, col_2, col_3
H, num, char, char
D, 1, a, b
D, 2, c, d
D, 3, e, f
D, 4, g, h
D, 5, i, j
F, 5 lines

在导入到 R 之前,我如何处理这个 CSV 文件? 我想跳过不以“D”开头的行并使用第三行作为标题,然后跳过第一列

导入的数据框应该是这样的:

col_1, col_2, col_3
1, a, b
2, c, d
3, e, f
4, g, h
5, i, j

【问题讨论】:

【参考方案1】:

您可以使用readLines() 将数据加载为文本文件,并且每一行都将作为字符串存储在向量中。然后,您将能够分析数据并找到最适合您的问题的结构。

这是一个可以帮助你的代码块:

# load environment
library(stringr)

# define the data path
data_path = '~/Downloads/file.csv'
# load data as a character vector
data = readLines(data_path)
# remove the first column, since it seems to be unuseful
data = str_remove(data, '^., ')
# detect and keep lines having 3 columns (2 commas)
c = str_count(data, ',')
data = data[c == 2]
# get rid of descriptors
d = !str_detect(data, 'num|char')
data = data[d]
# overwrite the data
writeLines(data, data_path)

# now load the data as a dataframe
df = read.csv(data_path)
# print output
print(df)

这是输出:

  col_1 col_2 col_3
1     1     a     b
2     2     c     d
3     3     e     f
4     4     g     h
5     5     i     j

解决方案不是那么笼统,但我认为您无法避免检测特定模式,以便从数据中删除/保留它们。

让我们知道它是否对您有所帮助..!

【讨论】:

谢谢,稍作修改即可使用。我想知道是否有任何通用代码来预处理数据。第一列包含有价值的信息。如果该行是注释,则第一列是“C”,如果是标题,则以“H”开头,当我们有真实数据时,它是“D”。我认为应该有一种通用的方法来根据第一列过滤导入数据 我不知道这种类型的文件,感谢分享@ShahabEinabadi。好吧,既然你手头有模式,你可以构建一个通用代码来清理这个文件格式。使用字符串向量很容易,你会很快得到它!您甚至应该与社区分享它,它可能对其他人非常有用! 我发现了这个问题***.com/questions/23197243/…;但在我的情况下它不起作用!我有一些注释行和两个标题,read.csv.sql 处理不了,这个函数需要一个干净的表

以上是关于如何在导入 R 之前预处理 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从流中读取 CSV 文件并在写入时处理每一行?

从R中的大型.CSV导入和提取随机样本

如何在 ssis 中处理之前检查 csv 文件中的文件结尾

从 R 中的大型 .CSV 导入和提取随机样本

linux 下如何使用shell 把处理好的csv文件导入到数据库下

在引号之间将csv列导入为整数