【问题标题】:Additional (unwanted) "X" in the header when importing .csv into R将 .csv 导入 R 时,标题中的附加(不需要的)“X”
【发布时间】:2016-01-19 04:50:14
【问题描述】:

我的计算机中有这个 .csv 文档,当我使用以下代码行将其导入 R 时:

dat <- read.table(file.choose(),sep=',', header=T)

我明白了:

    X COC EG EE AC LE ME SC
1  CE   3 22  0  0  4  3 50
2  AU  21  7  1  0  0  0 15
3  WA   4  0 10  0 12  0 21
4  HH   0 12  5  0  2  1  8
5  MH   0  2  0  2  2  0 26
6  HA   8  7  3  0  1  0  8
7  TY   0  0  0  0  0  0  1
8  PK   3  0  0  0  0  0  2
9  SR   0  1  0  0  0  0  1
10 FU   0  0  0  0  0  0  2

如果可以的话,除了行名顶部的“X”。原文件上没有X:

,COC,EG,EE,AC,LE,ME,SC
CE,3,22,0,0,4,3,50
AU,21,7,1,0,0,0,15
WA,4,0,10,0,12,0,21
HH,0,12,5,0,2,1,8
MH,0,2,0,2,2,0,26
HA,8,7,3,0,1,0,8
TY,0,0,0,0,0,0,1
PK,3,0,0,0,0,0,2
SR,0,1,0,0,0,0,1
FU,0,0,0,0,0,0,2

如何防止自动生成此“X”?

编辑:在下面的 cmets 之后,我尝试了 dat &lt;- read.table(file.choose(),sep=',', header=T, check.names=F),现在显示完美。

但是,事情大错特错(正如 cmets 中所建议的那样)。所以如果我做一个

str(dat)
'data.frame':   10 obs. of  8 variables

什么时候应该是10 obs. of 7 variables

我不明白,因为如果我刷新我的记忆:

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4

...在行名开始之前显然有一个空单元格...

【问题讨论】:

  • 在原始文档中添加一个?列名不能为空。
  • 如果列名以数字元素开头或缺失,则添加X。如果您不需要,check.names=FALSE 是一个选项。虽然我不确定如果缺少列名会发生什么。
  • 严格来说,列名可以为空,(使用check.names=FALSE),但这使得该列很难以任何有意义的方式使用,但也许dat[[1]] ,我不建议定期这样做。
  • 请显示实际文件内容的第一行。我怀疑您的第一列实际上是行名。这意味着您应该将不同的参数传递给read.table。如果您只使用read.csv 可能就足够了。
  • 查看这篇关于行名的帖子stackoverflow.com/questions/13271820/…

标签: r import


【解决方案1】:

感谢@Richard Erickson(参见 cmets)。感谢其他所有人。我在这里发帖是为了方便以后搜索相同的问题:

read.table(file.choose(), row.names = 1, header=T, sep=",")

   COC EG EE AC LE ME SC
CE   3 22  0  0  4  3 50
AU  21  7  1  0  0  0 15
WA   4  0 10  0 12  0 21
HH   0 12  5  0  2  1  8
MH   0  2  0  2  2  0 26
HA   8  7  3  0  1  0  8
TY   0  0  0  0  0  0  1
PK   3  0  0  0  0  0  2
SR   0  1  0  0  0  0  1
FU   0  0  0  0  0  0  2

还有……

str(dat)
'data.frame':   10 obs. of  7 variables:
 $ COC: int  3 21 4 0 0 8 0 3 0 0
 $ EG : int  22 7 0 12 2 7 0 0 1 0
 $ EE : int  0 1 10 5 0 3 0 0 0 0
 $ AC : int  0 0 0 0 2 0 0 0 0 0
 $ LE : int  4 0 12 2 2 1 0 0 0 0
 $ ME : int  3 0 0 1 0 0 0 0 0 0
 $ SC : int  50 15 21 8 26 8 1 2 1 2

所以我猜问题不在于列,而在于需要指定的行名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2013-06-08
    • 2019-04-29
    • 2021-12-15
    相关资源
    最近更新 更多