Импортировать файл .txt в R без конца строки - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно импортировать текстовый файл со следующим шаблоном:

"A" "B" "C" "D" "E" "F" "G" "H" "I""1"  1   "7-201-2012-30" "201" "2011"    0   NA  0   14190   "01-01-1970""2" 2   "7-201-2012-101"    "201"   "2011"  0   NA  0   14190   "01-01-1970""3" 3   "7-203-2031-19" "203"   "2032"  0   NA  0   14190   "01-01-1970""4" 4   "7-203-2031-23" "203"   "2032"  0   NA  0   14190   "01-01-1970""5" 5   "7-203-2031-26" "203"   "2032"  0   NA  0   14190   "01-01-1970""6" 6   "7-201-2012-57" "201"   "2011"  0   NA  0   14190   "01-01-1970""7" 7   "7-201-2012-58" "201"   "2011"  0   NA  0   14190   "01-01-1970""8" 8   "7-201-2012-64" "201"   "2011"  0   NA  0   14190   "01-01-1970""9" 9   "7-201-2012-67" "201"   "2011"  0   NA  0   14190   "01-01-1970""10"    10  "7-201-2012-74" "201"   "2011"  0   NA  0   14190   "01-01-1970""11"    11  "7-201-2012-77" "201"   "2011"  0   NA  0   14190   "01-01-1970""12"    12  "7-201-2012-78" "201"   "2011"  0   NA  0   14190   "01-01-1970""13"    13  "7-201-2012-80" "201"   "2011"  0   NA  0   14190   "01-01-1970""14"    14  "7-201-2012-85" "201"   "2011"  0   NA  0   14190   "01-01-1970""15"

Это не полный файл, но остальное продолжается по этому шаблону. Каждый пробел или табуляция указывает новый столбец до строки «1» («2», «3», ..., «15»). После этого должен начаться новый ряд. У меня нет опыта программирования на R, но я обнаружил аналогичную проблему на этом форуме, где строки были разделены обратными косыми чертами. Вот как они это решили:

data = paste(scan("Einzelteil_T35.txt",what="character"),collapse='') ## Read the file
dmat = matrix(strsplit(data,"\\\\")[[1]],ncol=15,byrow=T) ## Convert it to a matrix
dmat[,15] = gsub("\".*[0-9]\"","",dmat[,15]) ## Remove the next line number from the values of the last column
colnames(dmat)=dmat[1,] ## Take first line as names
dmat = dmat[-1,] ## Remove first line (as it contained the names)
df = as.data.frame(dmat)
df

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

1 Ответ

1 голос
/ 04 августа 2020

Просто кажется, что у вас есть 10 повторяющихся столбцов. Вы можете просто сформировать из них матрицу. Не нужно беспокоиться о сворачивании.

data <- scan("Einzelteil_T35.txt",what="character")
mm <- matrix(data, ncol=10, byrow=TRUE)

А затем, если хотите, вы можете превратить это в data.frame с небольшим изменением

colnames <- mm[1,]
coldata <- mm[-1,]
dd <- data.frame(lapply(split(coldata, col(coldata)), type.convert))
names(dd) <- colnames

Мы используем type.convert до go из строк в целые числа или числа с двойной точностью, если это необходимо. Затем мы устанавливаем имена, используя первую строку данных.

    A              B   C    D E  F G     H          I X1
1   1  7-201-2012-30 201 2011 0 NA 0 14190 01-01-1970  2
2   2 7-201-2012-101 201 2011 0 NA 0 14190 01-01-1970  3
3   3  7-203-2031-19 203 2032 0 NA 0 14190 01-01-1970  4
4   4  7-203-2031-23 203 2032 0 NA 0 14190 01-01-1970  5
5   5  7-203-2031-26 203 2032 0 NA 0 14190 01-01-1970  6
6   6  7-201-2012-57 201 2011 0 NA 0 14190 01-01-1970  7
7   7  7-201-2012-58 201 2011 0 NA 0 14190 01-01-1970  8
8   8  7-201-2012-64 201 2011 0 NA 0 14190 01-01-1970  9
9   9  7-201-2012-67 201 2011 0 NA 0 14190 01-01-1970 10
10 10  7-201-2012-74 201 2011 0 NA 0 14190 01-01-1970 11
11 11  7-201-2012-77 201 2011 0 NA 0 14190 01-01-1970 12
12 12  7-201-2012-78 201 2011 0 NA 0 14190 01-01-1970 13
13 13  7-201-2012-80 201 2011 0 NA 0 14190 01-01-1970 14
14 14  7-201-2012-85 201 2011 0 NA 0 14190 01-01-1970 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...