2015-01-21 3 views
0
Lake Elsinore 9.7 F W 60.2 131 1 1 0 2310.1 
Lake Elsinore 10.4 F W 53.9 67 0 0 0 1815.9 
Lake Elsinore 10.1 M W 54.3 96 1 1 1 1872.9 
Lake Elsinore 9.6 M W 55.1 72 1 . 1 1980.4 

Итак, у меня есть десять переменных V1-V10. Как я могу прочитать его в R. Вы видите, что первая переменная фактически разделена пробелом. Поэтому я не могу читать «разделение по пространству». Может кто-то заставил меня найти способ, с помощью которого я мог бы легко импортировать такие данные. Большое вам спасибо!Импорт грязных данных в r

+2

Я бы прочитал его с пространством как разделитель, а затем изменил данные – DatamineR

+1

Является ли первая колонка состоящей из двух слов? – nico

+1

Может быть лучше читать 'readLines', а затем кавычки вокруг имен городов для первого столбца, на всякий случай, если есть несколько слов. Затем вы можете использовать 'read.table (text = ...)' в этом тексте –

ответ

3

Вот два подхода:

1) Это может быть сделано с read.pattern в пакете gsubfn. Спички к скобках частям рисунка считываются в виде отдельных полей:

library(gsubfn) 

pattern <- "^(.*) (\\S+) (\\S+) (\\S+) (\\S+) (\\S+) (\\S+) (\\S+) (\\S+) (\\S+)" 
read.pattern("myfile.dat", pattern, na.strings = ".") 

подача:

    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
1  Lake Elsinore 9.7 F W 60.2 131 1 1 0 2310.1 
2  Lake Elsinore 10.4 F W 53.9 67 0 0 0 1815.9 
3  Lake Elsinore 10.1 M W 54.3 96 1 1 1 1872.9 
4  Lake Elsinore 9.6 M W 55.1 72 1 NA 1 1980.4 

2) Read в линиях, как они есть, заменить первое пространство на каждом линия с некоторым характером (здесь мы используем подчеркивание), перечитать теперь с помощью read.table, а затем заменить подчеркивание с пространством:

L <- readLines("myfile.dat") 
L <- sub(" ", "_", L) 
DF <- read.table(text = L, na.strings = ".") 
DF[[1]] <- sub("_", " ", DF[[1]]) 

дает тот же ответ.

+0

@CharoletteDeng 1) будет работать с 1, 2, 3 или более словами для V1 - действительно приятно; 2) не столь надежны, но будут по-прежнему работать в образцах данных – rawr

1

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

# First, read in all columns space separated 
df <- read.table(FILE, header = F, sep = " ") 

# Create a new column (V12) that's a concatenation of V1, V2 
within(df, V12 <- paste(V1, V2, sep=' ')) 

# And then drop the unwanted columns 
df <- df[,2:11] 

Помните, что у вас есть 11 колонок читать его в сыром виде, поэтому я создаю 12-м.

+0

Спасибо !!!!!!!!!! –