【发布时间】:2020-02-20 22:18:12
【问题描述】:
当我使用阅读 txt 文件时
read.table("text.txt", row.names=NULL, fill=TRUE)
创建了一个名为“row.names”的新列,它接管了预先存在的列的值。所有其余的列都向右移动。
知道发生了什么吗?
我使用 row.names=NULL,因为不添加它会返回错误,即存在重复的行名。
数据链接:https://raw.githubusercontent.com/bcaffo/ds4bme/master/data/federalRegions.txt
更新
这就是我的数据在上面的 read.table 之后的样子:
row.names Region State
1 1 Connecticut
2 1 Maine
3 1 Massachusetts
4 1 New Hampshire
5 1 Rhode Island
6 1 Vermont
7 2 New Jersey
8 2 New York
9 3 Delaware
10 3 Maryland
11 3 Pennsylvania
12 3 Virginia
13 3 West Virginia
14 4 Alabama
15 4 Florida
16 4 Georgia
17 4 Kentucky
18 4 Mississippi
19 4 North Carolina
20 4 South Carolina
21 4 Tennessee
22 5 Illinois
23 5 Indiana
24 5 Michigan
25 5 Minnesota
26 5 Ohio
27 5 Wisconsin
28 6 Arkansas
29 6 Louisiana
30 6 New Mexico
31 6 Oklahoma
32 6 Texas
33 7 Iowa
34 7 Kansas
35 7 Missouri
36 7 Nebraska
37 8 Colorado
38 8 Montana
39 8 North Dakota
40 8 South Dakota
41 8 Utah
42 8 Wyoming
43 9 Arizona
44 9 California
45 9 Hawaii
46 9 Nevada
47 10 Alaska
48 10 Idaho
49 10 Oregon
50 10 Washington
创建了一个新列“row.names”,取代了“Region”值,Region 现在将状态作为其值,“State”现在具有包含两个单词的状态名称的后半部分。
【问题讨论】:
-
它抱怨重复行名的事实(当你没有添加
row.names=NULL时)表明read.table发现第一行的字段比第二行少一个,这表明第一行line 是所有列标题,所有后续行的第一个字段是行名。如果是这种情况,那么看到重复的行名表明您对数据的假设确实存在错误。建议,使用read.table(..., row.names=NULL)[,-1](假设新列row.names始终作为第一列,这似乎是正确的)。 -
或者您可以通过任何其他方式删除它,例如
dat[, setdiff(colnames(dat), "row.names")]、dplyr::select(day, -row.names)、或subset(aaa, select=-row.names)。 -
我怀疑您可以使用
colClasses告诉它忽略第一列(如果list并且任何位置明确为NULL,则跳过该列),但它的使用需要您在阅读之前知道列数。重复阅读并不昂贵(尤其是如果您只阅读前几行),但似乎比可能需要的解决方法更多。 -
底线,我不知道在读入之前或读入时是否有使用
read.table自动省略该列的方法;我怀疑最简单的解决方案是将它们读入一列,然后丢弃该列,就像我的第一条评论一样。 -
@r2evans 感谢您的 cmets。鉴于我在更新中发布的问题,您的建议可能难以实施。如果您有任何建议,我将不胜感激!
标签: r