row.names = NULL добавляет столбец и сдвигает остальные - PullRequest
0 голосов
/ 21 февраля 2020

Когда я читаю текстовый файл, используя

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" теперь имеет вторую половину имен состояний, которые имеют два слова.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Это файл с разделителями табуляции, но, к сожалению, в строке заголовка вместо табуляции есть пробел. Мы можем получить файл с помощью readLines, изменить пространство на вкладке и использовать read.delim, чтобы поместить его во фрейм данных:

url <- "https://raw.githubusercontent.com/bcaffo/ds4bme/master/data/federalRegions.txt"
text <- readLines(url)
text[1] <- gsub(" ", "\t", text[1])
df <- read.delim(text = text, header = TRUE, stringsAsFactors = FALSE)

df
#>    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

Создано в 2020-02-20 с помощью представительный пакет (v0.3.0)

0 голосов
/ 21 февраля 2020

Как сказал @AllanCameron, у вас действительно есть файл с разделителями табуляции с неправильной первой строкой. Альтернатива - продолжать использовать read.table, но пропустить первую строку.

dat <- read.table("federalRegions.txt", sep="\t", skip=1)
head(dat)
#   V1            V2
# 1  1   Connecticut
# 2  1         Maine
# 3  1 Massachusetts
# 4  1 New Hampshire
# 5  1  Rhode Island
# 6  1       Vermont

Вы должны переименовать столбцы, но это не сложно. Вы можете сделать это вручную / буквально или несколько программно (хотя это может привести к проблемам, если есть смешанные пробелы / табуляции).

# colnames(dat) <- c("Region", "State") # manually
colnames(dat) <- strsplit(readLines("federalRegions.txt", n=1), "\\s+")[[1]]
head(dat)
#   Region         State
# 1      1   Connecticut
# 2      1         Maine
# 3      1 Massachusetts
# 4      1 New Hampshire
# 5      1  Rhode Island
# 6      1       Vermont
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...