2016-01-17 3 views
2

Итак, у меня есть огромный набор данных из более чем 500 000 различных строк, которые мне нужно разделить. Каждая строка представляет собой набор чисел, таких, как это:Разделение строк, содержащих значения

P040120000000000000000001001101210000000120000000000 

Важно отметить здесь раздел «P04012», что соответствует одной конкретной таблице. Несколько сотен тысяч единиц вниз, код превращается в это:

P051120150000000000000002158101110000000210000184380 

С «P05112015», что означает что-то другое. Первые 8-10 символов для каждой строки чисел соответствуют определенной таблице, но на данный момент они все сосредоточены в одном огромном наборе данных с одним столбцом и 500 000 строк. Как разделить строки на конкретные таблицы на основе их чисел?

Я планирую использовать read.fwf, чтобы разделить числовые строки на столбцы, так что на самом деле в этот момент мы просто выясняем, как разбить их на таблицы.

+0

Этот вопрос мне трудно понять. Вы просто хотите извлечь первые 8-10 символов из каждой строки? –

+0

Каков ваш желаемый результат? –

+0

Хорошо, так вот часть огромного файла данных: P040120000000000000000004212992540000021300000000000 P040120000000000000000004212992650000000730000000000 P050120010000000000000004112991110000021570000000000 P050120010000000000000004112991120000001110000000000 Что мне нужно сделать, это отдельный номерные строки, содержащие «P04012» от всего остального, в основном. Эти строки похожи на число 60 000 в наборе данных, поэтому в первых шести пробелах имеется около 60 000 записей с «p04012», а остальные после этого меняются. Означает ли это вопрос? – Idignatius

ответ

1

По вашему вопросу и с тем, что я могу понять, у вас есть данные, как показано ниже: Say в файл CSV:

RowID,Name 
P040120000000000000000001001101210000000120000000000,A 
P040130000000000000000001001101210000000120000000000,B 
P040140000000000000000001001101210000000120000000000,C 
P040150000000000000000001001101210000000120000000000,D 

Вы хотите создать таблицу на основе нескольких первых цифр, Ничем мой R код:

rm(list = ls()) 
FF = read.csv('/home/my/k.csv', header = TRUE); 
S=substr(FF$RowID, 1, 6) 
T1 <- table(S[1],as.character(FF$Name[1])) 
T2 <- table(S[2],as.character(FF$Name[2])) 
T3 <- table(S[3],as.character(FF$Name[3])) 
T4 <- table(S[4],as.character(FF$Name[4])) 
T1;T2;T3;T4; 

вы можете создать таблицу с помощью for loop, если у вас есть много полей строк. Надеюсь, я ответил на ваш вопрос.

2

Вот одна возможность, которая могла бы работать для вас, которая использует read.fwf():

options(stringsAsFactors = F) 

# fake data file 
tf <- tempfile() 
x <- cat(
    "P040120000000000000000001001101210000000120000000000", 
    "P051120150000000000000002158101110000000210000184380", 
    sep = "\n", 
    file = tf) 

# get table identifiers using read.fwf() 
ids <- read.fwf(tf, widths = c(10, 42)) 

# drop trailing zeros (not sure if this is important) 
ids <- gsub("0+$", "", ids$V1) 
Смежные вопросы