如何导入R中由选项卡/空格分隔的CSV数据?

时间:2016-12-12 05:27:19

标签: r csv

.csv文件中的数据如下所示。

id.airwaybill_number.order_number.org_pincode.product_type.inscan_date.pickup_date.actual_weight.original_act_weight.chargeable_weight.collectable_value.declared_value.code.name.active.center_shortcode.center_shortcode.if.sc.center_shortcode ... NULL csc.center_shortcode sc .center_shortcode..rts_status.reverse_pickup.ref_airwaybill_number.dest_pincode.pincode.item_description.length.breadth.height.volumetric_weight.city_name.city_name.state_shortcode.state_shortcode.zone_shortcode.zone_shortcode

“61773384 147200492 SLP759809537 110008 ppd 2016-03-02 04:38:56 2016-03-01 0.25 0.25 0.5 0 424 92006 JASPER INFOTECH PRIVATE LIMITED激活0 NULL 37.5 DLT MPS MPS 0 0 NULL 403516 403516 Vimarsh可充电电子管带充电器应急灯10 10 10 0.2 DELHI MAPUSA DL GA NCR WS“

当我使用 -

将其导入R时
y <- read.csv("x.csv", sep = "\t")
y <- read.table("x.csv", sep = "\t")

所有数据都进入一个单元格。这是非常大的数据样本,我想明智地导入数据,而不是单个单元格。

请帮忙。

1 个答案:

答案 0 :(得分:2)

你的文件有点奇怪,因为它似乎混合了分隔符(一些\t,一些_和一些,),并且@Sun Bee提到了在评论中,您的标题似乎与您的数据不匹配。出于这些原因,可能值得“从头开始”处理文件,而不是依赖read.tablefread之类的内容。

首先,将文件读入文本:

con <- file( "x.csv" )
input <- readLines( con )
close( con )

然后执行一些任务。首先,将\t,_中的任何一行拆分为每行中的文字。

data <- sapply( input, strsplit, "\t|,|_" )

如果你看一下每个元素的长度,你会发现第一个(标题)是一个奇数,这意味着这些值不会与标题名称对齐。

sapply( data, length )

我的建议是删除第一行,暂时没有标题。

data <- data[ -1 ]

然后将列表一起按行绑定以生成矩阵*(如果您愿意,可以将其转换为data.frame)。我在这里删除行名称因为我认为你不需要它们。

data <- do.call( rbind, data )
row.names(data) <- NULL

上述结果是我所说的很好地表示您的数据,尽管没有列名。如果您愿意,可以使用文件的第一行并使用它来提取正确的列名,但我没有看到它们应该如何去,所以我不会在这里尝试。

  • 注意如果您希望rbind函数不将列转换为factor类(默认情况下会是这样),您可以事先指定options( stringsAsFactors = FALSE )