дополнительные столбцы создаются при использовании read.table

Поскольку я не могу предоставить файл .txt, который я использую, я могу только описать ситуацию...

Текстовый файл не имеет пропущенных значений и представляет собой текстовый файл, разделенный табуляцией, или, по крайней мере, так кажется. Когда я использую разделитель, разделенный табуляцией, кажется, что все в порядке. Заголовки столбцов снабжены именами, содержащими пробелы (например, Возраст родителя).

Когда я загружаю данные, используя следующую строку кода, все выглядит правильно. Однако я получаю кучу повторяющихся столбцов.

Например, «Возраст родителя» будет переименован в Age.of.Parent, поскольку в именах столбцов не может быть пробелов, но есть будет второй столбец, который идентичен значениям, но имеет имя - Age.of.Parent1

Вопрос. Что мне нужно сделать, чтобы убедиться, что ни один из этих столбцов "Повторяющихся" не создается? Столбца Age.of.Parent1 явно нет в наборе данных, но из, может быть, 20 столбцов я получаю в общей сложности 30 (10 новых дубликатов с этой «1» в конце).

read.table('mydata.txt', header=TRUE,  stringsAsFactors= FALSE, sep='\t')

person runningbirds    schedule 29.12.2016    source источник
comment
Вы можете использовать check.names = FALSE в read.table, но что касается проблемы с повторяющимся столбцом, без воспроизводимого примера неясно.   -  person akrun    schedule 29.12.2016
comment
Я могу воспроизвести это, когда создаю текстовый файл с двумя столбцами с одинаковыми именами Age of Parent и Age of Parent и читаю его с помощью read.table. Вероятно, вам придется внимательно изучить исходный файл, по крайней мере, те строки, где дополнительные столбцы содержат данные. Возможными ловушками могут быть дублированные вкладки \t\t или удаленный конец строки. Однако без показа данных хотя бы верхних строк) это все спекулятивно.   -  person Uwe    schedule 30.12.2016


Ответы (1)


Вот пример, показывающий, как фрейм данных может быть сохранен в файле, разделенном вкладками, и считан из него.

library(caroline)

Age <- c(20, 30, 50) 
Names <- c("Name1", "Name2", "Name3") 
df <- data.frame(Age, Names)
colnames(df) <- c("Age of Parents", "Names of Parents")

#writing the data frame to a tab delimited text file
write.delim(df, file = "foo.txt")

#reading the tab delimited text file 
#The argument fill is logical. If TRUE then in case the rows have unequal length, blank fields are implicitly added.
read.delim(file="foo.txt", header = TRUE, sep = "\t", fill = TRUE)

Вывод выглядит следующим образом:

введите здесь описание изображения

person deb2015    schedule 30.12.2016