我在尝试读取由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的计算机上运行。
答案 0 :(得分:3)
将sep=
字符的长度设为1。因此,您可以简单地调用外部命令(如sed
或perl
)来替换双字符||
,或者在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>