【发布时间】:2020-06-07 04:37:23
【问题描述】:
假设我有以下 CSV,它有 6 列包含数据:
METB;Metropolis Municipal Bonds ;100;BOND ;MAIN ;2020-01-23;
PFM ;Precision Food Manufacturing ;121;EQUITY ;MAIN ;2020-12-30;
NLT ;Northern Light and Telegraph ;47 ;EQUITY ;MAIN ;2020-03-21;
PAE ;Peninsula Aeronautical Inc ;75 ;EQUITY ;SECONDARY;2020-11-11;
请注意,CSV 文件在每一行的末尾包含一个额外的分隔符(即尾随 ;),这会导致 R 将我的 CSV 视为有 7 列而不是 6 列。
我目前正在使用以下方式读取 CSV:
df <- read.csv(
'./data.csv',
header=FALSE,
sep=';',
strip.white=TRUE,
col.names=c('ticker',
'name',
'price',
'type',
'board',
'date',
'unused.column'), # <- ATTENTION.
colClasses=c(ticker='character',
name='character',
date='Date',
unused.column='NULL')) # <- ATTENTION.
这适用于同时执行所有这些操作:
- 读取 CSV,
- 为列指定正确的名称(而不是
V1、V2等), - 为列提供正确的类(例如
character、Date等), - 忽略最后一列
但是,我觉得我的解决方案很脏,因为我必须明确地为空白列命名(即unused.column)才能使用colClasses 中的"NULL" 将其删除。如果我的 CSV 在每行的末尾包含多个空白列(例如;;;;;;),我当前使用的方法将开始变得不切实际。
在读取 CSV 时忽略最后一列,同时为每列提供正确的标题名称并为每列提供正确的类,有什么更好的方法?
【问题讨论】:
-
我其实很喜欢你现在的方法。您真的希望在您的输入 CSV 中有这么多未使用的列吗?
-
@TimBiegeleisen 是的,我希望我的输入 CSV 中有许多未使用的列。我宁愿不必将它们命名为
unused.column.1、unused.column.2、unused.column.3等。