2

我在尝试读取由 561366 行和 15 列组成的 .txt 文件时遇到问题。第一行看起来像这样:

  70000||Consumer A||23||DN||70000||10038782||1||SI||2||NO||0||N/A||0||N/A||1
  90000||Consumer B||23||DN||90000||15402432||1||SI||2||NO||0||N/A||0||N/A||1 
  .
  .
  .

我用于读取文件的代码是:

  Datos <- read.table("C:/Users/hernandezn/Desktop/DataSets/INACTIVOS.txt", 
  header=FALSE, sep="|", na.strings="N/A", dec=".", strip.white=TRUE)

如您所见,我的列由 分隔"||",但我不能在 R 命令中使用它read.table作为sep选项。所以,我已经使用sep="|"并且必须为此付出代价(现在我有 29 列)。

问题是我只是从文件中的 561366 中得到 241116 行。另一方面,我尝试通过替换"||"符号;并将其保存为 .xlsx 文件来读取此文件,并且我以这种方式获取所有行。

你能建议我解决这个问题的方法吗?会不会是内存问题?我在具有 2GB 内存 RAM 的计算机上运行 32 位 R 版本。

4

1 回答 1

3

我认为sep=字符的长度必须为 1。因此,您可以简单地调用外部命令(如sedperl)来替换两个字符||,或者在 R 中自己执行。

这是一个概念验证单线,它首先切换||,(作为|元字符,我们需要对其进行转义,并转义转义字符\):

R> read.csv(textConnection(gsub("\\|\\|", ",", "70000||Consumer A||23||DN||70000||10038782||1||SI||2||NO||0||N/A||0||N/A||1\n90000||Consumer B||23||DN||90000||15402432||1||SI||2||NO||0||N/A||0||N/A||1")), header=FALSE)
     V1         V2 V3 V4    V5       V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
1 70000 Consumer A 23 DN 70000 10038782  1 SI  2  NO   0 N/A   0 N/A   1
2 90000 Consumer B 23 DN 90000 15402432  1 SI  2  NO   0 N/A   0 N/A   1
R> 

或者可能在两行中更清晰:

R> txt <- "70000||Consumer A||23||DN||70000||10038782||1||SI||2||NO||0||N/A||0||N/A||1\n90000||Consumer B||23||DN||90000||15402432||1||SI||2||NO||0||N/A||0||N/A||1"
R> read.csv(textConnection(gsub("\\|\\|", ",", txt)), header=FALSE)
     V1         V2 V3 V4    V5       V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
1 70000 Consumer A 23 DN 70000 10038782  1 SI  2  NO   0 N/A   0 N/A   1
2 90000 Consumer B 23 DN 90000 15402432  1 SI  2  NO   0 N/A   0 N/A   1
R> 
于 2012-05-08T15:41:38.270 回答