2016-01-22 4 views
4

Я недавно работал над фиктивным набором данных, и я узнал, что предоставленные мне данные были в одной строке. Пример похож на тот же изображен следующим образом:Как читать один выровненный CSV в R?

Name,Age,Gender,Occupation A,10,M,Student B,11,M,Student C,11,F,Student 

я хочу, чтобы импортировать данные и получить выход следующим образом:

Name Age Gender Occupation 
A 10  M  Student 
B 11  M  Student 
C 12  F  Student 

случай может возникнуть, что значение может отсутствовать. для импорта таких данных требуется логика. Может ли кто-нибудь помочь мне построить логику импорта таких наборов данных.

Я попробовал нормальный импорт, но это действительно не помогло. просто импортировал файл с помощью функции read.csv(), и это не дало мне ожидаемого результата.

EDIT: что, если данные, как:

Name,Age,Gender,Occupation ABC XYZ,10,M,Student B,11,M,Student C,11,F,Student 

и я хочу выход как:

Name  Age Gender Occupation 
ABC XYZ 10  M  Student 
    B  11  M  Student 
    C  12  F  Student 

ответ

11

Вы можете прочитать файл в с readLines, включите пробелы в разрывы строк и затем прочитать его с read.csv:

# txt <- readLines("my_data.txt") # with a real data file 
txt <- readLines(textConnection("Name,Age,Gender,Occupation A,10,M,Student B,11,M,Student C,11,F,Student")) 

read.csv(text=gsub(" ","\n",txt)) 

выходного

Name Age Gender Occupation 
1 A 10  M Student 
2 B 11  M Student 
3 C 11  F Student 
+0

хорошо это пример данных o олько. Мне предоставлено около миллиона входных данных. Я не могу скопировать все данные и добавить их в консоль R. –

+4

это всего лишь пример. Используйте 'readLines (" my_data.txt ")' вместо – scoa

+0

что делать, если данные похожи: Имя, возраст, пол, профессия ABC XYZ, 10, M, Student B, 11, M, Student C, 11, F, Студент и я хочу выход как: Имя Возраст Пол Оккупация ABC XYZ 10 M Student B 11 M Student C 12 F Студент –

9

Если у вас есть миллионы записей, вы, вероятно, хотите, чтобы ускорить этот процесс, так что я предлагаю использовать data.table «ы fread вместо read.csv, который также может принять команду оболочки для предварительной обработки файла перед чтение в R, и sed будет намного быстрее, чем делать манипуляции со строками в R.

например, если вы это CSV хранится в /tmp/x.csv, вы можете попробовать что-то вроде:

> data.table::fread("sed 's/ /\\n/g' /tmp/x.csv") 
    Name Age Gender Occupation 
1: A 10  M Student 
2: B 11  M Student 
3: C 11  F Student 
+0

Спасибо @daroczig, но я хотел сделать это с помощью базовых пакетов R. Для этого мне нужно импортировать пакет data.table. хотя информация очень полезна. –

+2

Что заставляет вас загружать пакет 'data.table'?Я имею в виду, что я не уверен, почему лучше сделать что-то в базе R, если есть более удобные и быстрые способы решения проблемы - особенно со многими строками. Меня действительно интересуют ваши аргументы. – daroczig

+0

Я хотел создать логику для программы в Base R. Я знаю, что удобно использовать внешние пакеты, но я ограничен только базовыми пакетами R. –

Смежные вопросы