2017-05-22 4 views
1

だから私は、次のようなかなり古い、生のデータを持っている:使用R生、古いデータをきれいにする

 1 
    ******* 
    ******* 
    ******* 
    ******* 
     S H 
    HHHHH 
     2 
    ******* 
    JSH K 
    ******* 
    ******* 
    ******* 
    ******* 

最初の行がIDである1つの番号1を持っています。以下の2行〜7行は7つの要素、つまりa1、a2、a3、a4、a5、a6、a7の7つの要素に対応しています。行8は再びIDです。したがって、各個人には6行あります。

日の終わりに、私は、データは任意のファイル名の拡張子(のような.csvまたは.txtの)を持っていない出力はこの

ID a1 a2 a3 a4 a5 a6 a7 
1 1 * * * * * * * 
2 1 * * * * * * * 
3 1 * * * * * * * 
4 1 * * * * * * * 
5 1 <NA> <NA> S <NA> <NA> H <NA> 
6 1 <NA> H H H H H <NA> 
7 2 * * * * * * * 
8 2 J S H <NA> <NA> <NA> K 
9 2 * * * * * * * 
10 2 * * * * * * * 
11 2 * * * * * * * 
12 2 * * * * * * * 

のように見えるしたいです。だから最初の質問は、データの形成を変えずにRで読む方法です。

私はread.csv()を使用しようとしましたが、それは6行目は、第二カテゴリの代わりに、第六に代わり第三及びHの第一カテゴリーにSを割り当てる

SH 

になるようになります。そして最終的には、どのようにして目的のデータフレームを生成できますか?

答えて

2

あなたはおそらくread.fwfを探している私には思えます。以下は、私が使った方法です。もちろん、textConnection部分を取り除き、ファイルへのパスに置き換えたい場合は、と考えてください。これがうまくいくはずです。

d <- read.fwf(textConnection(
" 1 
******* 
******* 
******* 
******* 
    S H 
HHHHH 
    2 
******* 
JSH K 
******* 
******* 
******* 
*******"), 
    widths = rep(1, 7), 
    na = c(" "), 
    stringsAsFactors = FALSE) 

id <- as.numeric(d[seq(1, nrow(d), 7), 5]) 
id <- rep(id, each = 6) 

d <- d[seq(1, nrow(d), 7), ] 
d <- cbind(id, d) 
names(d)[-1] <- paste0("a", 1:7) 
d 

    id a1 a2 a3 a4 a5 a6 a7 
3 1 * * * * * * * 
4 1 * * * * * * * 
5 1 * * * * * * * 
6 1 <NA> <NA> S <NA> <NA> H <NA> 
7 1 <NA> H H H H H <NA> 
8 1 <NA> <NA> <NA> <NA> 2 <NA> <NA> 
9 2 * * * * * * * 
10 2 J S H <NA> <NA> <NA> K 
11 2 * * * * * * * 
12 2 * * * * * * * 
13 2 * * * * * * * 
14 2 * * * * * * * 
+1

ありがとう、この種のファイルを知って初めて、実際には固定幅ファイルという名前があります! – skyindeer

+0

問題はありませんでした、私は助けてくれてうれしいです! –

0

readLineをお試しください。ファイルを文字ベクタに読み込みます。その後、 "" で文字列を分割することができます:

v1 = readLines("C:/User/Yourfolder/test_text") 
v2 = t(sapply(v1, function(x) {unlist(strsplit(x,""))})) 
rownames(v2) = c(1:length(v1)) 

出力:

[,1] [,2] [,3] [,4] [,5] [,6] [,7] 
1 " " " " " " " " "1" " " " " 
2 "*" "*" "*" "*" "*" "*" "*" 
3 "*" "*" "*" "*" "*" "*" "*" 
4 "*" "*" "*" "*" "*" "*" "*" 
5 "*" "*" "*" "*" "*" "*" "*" 
6 " " " " "S" " " " " "H" " " 
7 " " "H" "H" "H" "H" "H" " " 
8 " " " " " " " " "2" " " " " 
9 "*" "*" "*" "*" "*" "*" "*" 
10 "J" "S" "H" " " " " " " "K" 
11 "*" "*" "*" "*" "*" "*" "*" 
12 "*" "*" "*" "*" "*" "*" "*" 
13 "*" "*" "*" "*" "*" "*" "*" 
+0

このソリューションはIDを処理していないようです。 – G5W

関連する問題