读取R列中的文件用多个空格分隔

时间:2014-12-21 01:04:48

标签: r readfile

我试图加载一个文件,文件列用空格分隔,但是有不同的空格数 列之间。因为在我读书的时候,每件空间的R都是另一列并产生额外的空列。有没有其他方法可以毫无问题地加载数据。

示例数据:

AAT_ECOLI   0.49  0.29  0.48  0.50  0.56  0.24  0.35   cp
ACEA_ECOLI  0.07  0.40  0.48  0.50  0.54  0.35  0.44   cp
ACEK_ECOLI  0.56  0.40  0.48  0.50  0.49  0.37  0.46   cp
ACKA_ECOLI  0.59  0.49  0.48  0.50  0.52  0.45  0.36   cp  

你可以看到,第一列和第二列之间有3个空格,第2列和第3列有两个空格。

我使用此代码加载数据

xxx <- read.csv("../Datasets/Ecoli/ecoli.data", header=FALSE,sep=" ")

我尝试了3个空间或其他东西,但没有一个工作。

原始数据文件:https://drive.google.com/file/d/0B_XEmkrWR-hCMXVySVI2bU5waGs/view?usp=sharing 谢谢

3 个答案:

答案 0 :(得分:3)

您需要设置strip.white=Tsep=''

xxx <- read.csv("c:\\r_stack_overflow\\test.csv", header=FALSE, strip.white=T, sep='')

> xxx
          V1   V2   V3   V4  V5   V6   V7   V8 V9
1  AAT_ECOLI 0.49 0.29 0.48 0.5 0.56 0.24 0.35 cp
2 ACEA_ECOLI 0.07 0.40 0.48 0.5 0.54 0.35 0.44 cp
3 ACEK_ECOLI 0.56 0.40 0.48 0.5 0.49 0.37 0.46 cp
4 ACKA_ECOLI 0.59 0.49 0.48 0.5 0.52 0.45 0.36 cp

> dim(xxx)
[1] 4 9

它有效!

<强>更新

它也适用于您的数据:

xxx <- read.csv("c:\\r_stack_overflow\\ecoli.data", header=FALSE, strip.white=T, sep='')

输出:

> xxx
            V1   V2   V3   V4  V5   V6   V7   V8  V9
1    AAT_ECOLI 0.49 0.29 0.48 0.5 0.56 0.24 0.35  cp
2   ACEA_ECOLI 0.07 0.40 0.48 0.5 0.54 0.35 0.44  cp
3   ACEK_ECOLI 0.56 0.40 0.48 0.5 0.49 0.37 0.46  cp
4   ACKA_ECOLI 0.59 0.49 0.48 0.5 0.52 0.45 0.36  cp
5    ADI_ECOLI 0.23 0.32 0.48 0.5 0.55 0.25 0.35  cp
6   ALKH_ECOLI 0.67 0.39 0.48 0.5 0.36 0.38 0.46  cp
7   AMPD_ECOLI 0.29 0.28 0.48 0.5 0.44 0.23 0.34  cp
8   AMY2_ECOLI 0.21 0.34 0.48 0.5 0.51 0.28 0.39  cp
9    APT_ECOLI 0.20 0.44 0.48 0.5 0.46 0.51 0.57  cp
10  ARAC_ECOLI 0.42 0.40 0.48 0.5 0.56 0.18 0.30  cp
11  ASG1_ECOLI 0.42 0.24 0.48 0.5 0.57 0.27 0.37  cp
12  BTUR_ECOLI 0.25 0.48 0.48 0.5 0.44 0.17 0.29  cp
13  CAFA_ECOLI 0.39 0.32 0.48 0.5 0.46 0.24 0.35  cp
14  CAIB_ECOLI 0.51 0.50 0.48 0.5 0.46 0.32 0.35  cp
15   CFA_ECOLI 0.22 0.43 0.48 0.5 0.48 0.16 0.28  cp
16  CHEA_ECOLI 0.25 0.40 0.48 0.5 0.46 0.44 0.52  cp
17  CHEB_ECOLI 0.34 0.45 0.48 0.5 0.38 0.24 0.35  cp
18  CHEW_ECOLI 0.44 0.27 0.48 0.5 0.55 0.52 0.58  cp
19  CHEY_ECOLI 0.23 0.40 0.48 0.5 0.39 0.28 0.38  cp
20  CHEZ_ECOLI 0.41 0.57 0.48 0.5 0.39 0.21 0.32  cp
21   CRL_ECOLI 0.40 0.45 0.48 0.5 0.38 0.22 0.00  cp
22  CSPA_ECOLI 0.31 0.23 0.48 0.5 0.73 0.05 0.14  cp
23  CYNR_ECOLI 0.51 0.54 0.48 0.5 0.41 0.34 0.43  cp
24  CYPB_ECOLI 0.30 0.16 0.48 0.5 0.56 0.11 0.23  cp
25  CYPC_ECOLI 0.36 0.39 0.48 0.5 0.48 0.22 0.23  cp
26  CYSB_ECOLI 0.29 0.37 0.48 0.5 0.48 0.44 0.52  cp
27  CYSE_ECOLI 0.25 0.40 0.48 0.5 0.47 0.33 0.42  cp
28  DAPD_ECOLI 0.21 0.51 0.48 0.5 0.50 0.32 0.41  cp
29   DCP_ECOLI 0.43 0.37 0.48 0.5 0.53 0.35 0.44  cp
30  DDLA_ECOLI 0.43 0.39 0.48 0.5 0.47 0.31 0.41  cp
31  DDLB_ECOLI 0.53 0.38 0.48 0.5 0.44 0.26 0.36  cp
32  DEOC_ECOLI 0.34 0.33 0.48 0.5 0.38 0.35 0.44  cp
33  DLDH_ECOLI 0.56 0.51 0.48 0.5 0.34 0.37 0.46  cp
34   EFG_ECOLI 0.40 0.29 0.48 0.5 0.42 0.35 0.44  cp
35  EFTS_ECOLI 0.24 0.35 0.48 0.5 0.31 0.19 0.31  cp
36  EFTU_ECOLI 0.36 0.54 0.48 0.5 0.41 0.38 0.46  cp
37   ENO_ECOLI 0.29 0.52 0.48 0.5 0.42 0.29 0.39  cp
38  FABB_ECOLI 0.65 0.47 0.48 0.5 0.59 0.30 0.40  cp
39   FES_ECOLI 0.32 0.42 0.48 0.5 0.35 0.28 0.38  cp
40  G3P1_ECOLI 0.38 0.46 0.48 0.5 0.48 0.22 0.29  cp
41  G3P2_ECOLI 0.33 0.45 0.48 0.5 0.52 0.32 0.41  cp
42  G6PI_ECOLI 0.30 0.37 0.48 0.5 0.59 0.41 0.49  cp
43  GCVA_ECOLI 0.40 0.50 0.48 0.5 0.45 0.39 0.47  cp
44  GLNA_ECOLI 0.28 0.38 0.48 0.5 0.50 0.33 0.42  cp
45  GLPD_ECOLI 0.61 0.45 0.48 0.5 0.48 0.35 0.41  cp
46  GLYA_ECOLI 0.17 0.38 0.48 0.5 0.45 0.42 0.50  cp
47  GSHR_ECOLI 0.44 0.35 0.48 0.5 0.55 0.55 0.61  cp
48    GT_ECOLI 0.43 0.40 0.48 0.5 0.39 0.28 0.39  cp
49  HEM6_ECOLI 0.42 0.35 0.48 0.5 0.58 0.15 0.27  cp
50  HEMN_ECOLI 0.23 0.33 0.48 0.5 0.43 0.33 0.43  cp
51  HPRT_ECOLI 0.37 0.52 0.48 0.5 0.42 0.42 0.36  cp
52   IF1_ECOLI 0.29 0.30 0.48 0.5 0.45 0.03 0.17  cp
53   IF2_ECOLI 0.22 0.36 0.48 0.5 0.35 0.39 0.47  cp
54  ILVY_ECOLI 0.23 0.58 0.48 0.5 0.37 0.53 0.59  cp
55  IPYR_ECOLI 0.47 0.47 0.48 0.5 0.22 0.16 0.26  cp
56   KAD_ECOLI 0.54 0.47 0.48 0.5 0.28 0.33 0.42  cp
57  KDSA_ECOLI 0.51 0.37 0.48 0.5 0.35 0.36 0.45  cp
58  LEU3_ECOLI 0.40 0.35 0.48 0.5 0.45 0.33 0.42  cp
59   LON_ECOLI 0.44 0.34 0.48 0.5 0.30 0.33 0.43  cp
60  LPLA_ECOLI 0.42 0.38 0.48 0.5 0.54 0.34 0.43  cp
61  LYSR_ECOLI 0.44 0.56 0.48 0.5 0.50 0.46 0.54  cp
62  MALQ_ECOLI 0.52 0.36 0.48 0.5 0.41 0.28 0.38  cp
63  MALZ_ECOLI 0.36 0.41 0.48 0.5 0.48 0.47 0.54  cp
64  MASY_ECOLI 0.18 0.30 0.48 0.5 0.46 0.24 0.35  cp
65  METB_ECOLI 0.47 0.29 0.48 0.5 0.51 0.33 0.43  cp
66  METC_ECOLI 0.24 0.43 0.48 0.5 0.54 0.52 0.59  cp
67  METK_ECOLI 0.25 0.37 0.48 0.5 0.41 0.33 0.42  cp

尺寸:

> dim(xxx)
[1] 336   9

答案 1 :(得分:3)

read.table可以完美地处理您下载的数据集。除file之外不需要任何参数(除非您不想要因素)。对于实际上以逗号分隔的文件,我倾向于保留read.csv

df <- read.table("Downloads/ecoli.data")
str(df)
# 'data.frame':    336 obs. of  9 variables:
#  $ V1: Factor w/ 336 levels "AAS_ECOLI","AAT_ECOLI",..: 2 3 4 5 6 8 9 12 ...
#  $ V2: num  0.49 0.07 0.56 0.59 0.23 0.67 0.29 0.21 0.2 0.42 ...
#  $ V3: num  0.29 0.4 0.4 0.49 0.32 0.39 0.28 0.34 0.44 0.4 ...
#  $ V4: num  0.48 0.48 0.48 0.48 0.48 0.48 0.48 0.48 0.48 0.48 ...
#  $ V5: num  0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
#  $ V6: num  0.56 0.54 0.49 0.52 0.55 0.36 0.44 0.51 0.46 0.56 ...
#  $ V7: num  0.24 0.35 0.37 0.45 0.25 0.38 0.23 0.28 0.51 0.18 ...
#  $ V8: num  0.35 0.44 0.46 0.36 0.35 0.46 0.34 0.39 0.57 0.3 ...
#  $ V9: Factor w/ 8 levels "cp","im","imL",..: 1 1 1 1 1 1 1 1 1 1 ...

答案 2 :(得分:0)

可能有更好的方法,但我相信这应该有效:

file_df <- scan('data.txt', what = list("","","","","","","","",""))
df <- data.frame(matrix(unlist(file_df), nrow=4))