簡體   English   中英

在 R 中導入 .txt 文件

[英]Importing .txt file in R

我想導入具有以下模式的 txt 文件:

"X1"\"ID_T35.x"\"Produktionsdatum.x"\"Herstellernummer.x"\"Werksnummer.x"\"Fehlerhaft.x"\"Fehlerhaft_Datum.x"\"Fehlerhaft_Fahrleistung.x"\"ID_T35.y"\"Produktionsdatum.y"\"Herstellernummer.y"\"Werksnummer.y"\"Fehlerhaft.y"\"Fehlerhaft_Datum.y"\"Fehlerhaft_Fahrleistung.y""1"\2\"35-217-2173-92"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"2"\9\"35-217-2173-23"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"3"\10\"35-217-2173-24"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"4"\11\"35-217-2173-52"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"5"\12\"35-217-2173-104"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"6"\19\"35-217-2173-50"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"7"\20\"35-217-2173-93"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"8"\21\"35-217-2173-111"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"9"\22\"35-217-2173-113"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"10"\23\"35-217-2173-138"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"11"\24\"35-217-2173-150"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"12"\25\"35-217-2173-158"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"13"\33\"35-217-2173-8"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"14"\34\"35-217-2173-43"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"15"\35\"35-217-2173-79"\2008-11-07\"217"\2173\1\2010-04-28\41562.3534246575\NA\NA\NA\NA\NA\NA\NA"16"\36\"35-217-2173-102"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"17"\37\"35-217-2173-117"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"18"\38\"35-217-2173-139"\2008-11-07\"217"\2173\1\2010-04-28\41562.3534246575\NA\NA\NA\NA\NA\NA\NA"19"\40\"35-217-2173-55"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"20"\41\"35-217-2173-182"\2008-11-08\"217"\2173\1\2010-04-29\41648.7616438356\NA\NA\NA\NA\NA\NA\NA"21"\42\"35-217-2173-212"\2008-11-08\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"22"\43\"35-217-2173-227"\2008-11-08\"217"\2173\1\2010-04-29\41648.7616438356\NA\NA\NA\NA\NA\NA\NA"23"\44\"35-217-2173-283"\2008-11-08\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"24"\49\"35-217-2173-41"\2008-11-07\"217"\2173\0\NA\0\NA\NA\NA\NA\NA\NA\NA"25"

反斜杠表示一個新列,直到字符串“1”。 那應該是一個新行。 數據集應該有 818844 行。 該數據集稱為 Einzelteil_T35。 我的方法是這樣的:

library(readr)
library(data.table)
library(tidyverse)

Einzelteil_T35 <- read_file("Einzelteil_T35.txt") %>%
  str_replace_all(. , "\"\"", ";") %>%
  str_replace_all(. ,"____", "\n" ) %>%    #"_____" means i haven't find a pattern to identify the new row
  fread(text = .) %>%
  as_tibble()

我一直在考慮一種計算反斜杠並在每次找到第 15 個反斜杠時創建一個新行的方法,因為第 15 個反斜杠是新行的開始,但我沒有找到方法。 也許你可以用這種方法或完全不同的方法幫助我。

非常感謝您提前

如果您可以確定模式“1”只出現在標記新行,也許您可以試試這個?

編輯:我的意思是沒有第一個 pipe。

library(readr)
library(data.table)
library(tidyverse)

Einzelteil_T35 <- read_file("Einzelteil_T35.txt") %>%
  str_replace_all(. ,'\\"1\\"', "\n" ) %>%   
  fread(text = .) %>%
  as_tibble()

如果不是,也許有一種方法可以使模式更加具體,例如,如果新行之前的“”總是以“.y”或其他東西開頭。

此代碼讀取文件,將其轉換為 Nx15 矩陣,從最后一列中刪除行號,將第一行用作 header,然后將其轉換為 data.frame。

唯一剩下的問題是轉換為矩陣將所有單元格內容轉換為字符。 您必須手動將列轉換回數字。

data = paste(scan("data_line.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)

編輯:修復了正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM