2017-04-03 3 views
0

私は以下の形式のテキストファイルを持っています。テキストファイルをヘッダーにする必要があり、その下のテキストを列値にする必要があるデータフレームにテキストファイルを読み込む

Main Node 

Node1 

Some ABCD 

Some XYZ 

Node2 

Some VMLK 
Some LPO 

Node3 

LMK 

POL 

TOL 

これは以下のようなデータフレームに変換する必要があります。

Main Node  Node1   Node2   Node3 
       Some ABCD  Some VMLK  LMK 
       Some XYZ  Some LP  POL 
               TOL 

この場合、メインノード、ノード1、ノード2、ノード3はヘッダーになり、その下のテキストは列の値になります。すべての行は各行になります。

R

+0

データに固定された構造、つまりヘッダー情報が出現する列名または事前定義された行に特定のパターンがありますか?そうでなければ、あなたが求めるものを達成するのは難しいでしょう。私はあなたが実際のデータを与えた例ですか? – Vince

+0

@Vince - 列名(ヘッダー)は常に同じです。列の値は、次の列の名前が発生しなくなるまで常に列の名前の下に表示されます。 – NinjaR

+0

私は多くを推測しました。私の答えは解決策を試みていますが、データマングングを助けるのにawkを使っています。 – Vince

答えて

0

私は完全にRでこれを行う方法を知らないでこれを達成する方法はあります。このようなものにデータを変換する必要があります

awk 'BEGIN { OFS=","; print "Node","Value" } $0~/^Node/ { node=$0; next } { print node, $0 } input_data.txt > output_data.txt 

Node,Value 
Node1,Some ABCD 
Node1,Some XYZ 
Node2,Some VMLK 
Node2,Some VMLP 
Node3,LMK 
Node3,POL 
Node3,TOL 

その後Rに読み込ま:私は最初のデータを準備しますawkを使用して

df <- read.csv("output_data.txt", header=TRUE) 

library(reshape2) 

dcast(df, Value~Node) 

doesnの」あなたが望むものをまさに与えるが、かなり近い。

0

これはRで試み、とはいえない非常に簡潔である:ここでは

df=read.table("yourpath",sep="\n") 
df=as.character(df[,1]); 
colnames=c("Main Node","Node1","Node2","Node3") 
start=match(colnames,df); 
end=c(match(colnames,df)[-1]-1,length(df)) 
len=end-start; 
df2=data.frame(matrix(NA,ncol=length(colnames),nrow=max(len))) 
colnames(df2)=colnames 
for(j in 1:length(start)) 
{ 
if(len[j]>0) 
{df2[(1:len[j]),j]=df[(start[j]+1):end[j]]} 
} 

、欠損値はNAとして表現されています。

関連する問題