在使用||分隔的列中将txt文件读入R中时遇到麻烦

时间:2012-05-08 15:26:08

标签: r

我在尝试读取由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文件来读取此文件,并且我以这种方式获取所有行。

你能建议我解决这个问题的方法吗?这可能是记忆问题吗?我有一个32位的R版本在一台带有2GB Memory Ram的计算机上运行。

1 个答案:

答案 0 :(得分: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>