0

私はRとstackoverflowの初心者です。Rのcsvデータの再構築についてあなたの助けが必要です。各行が次​​の構造を持つグラフィックx、yの変数n点を表すファイルを読んでいます:

code  x   y   x   y  x  y  x  y
1     1   0   2   2  3  3  4  5   // 1rst graphic with 4 points
2     1   1   2   3               // 2nd graphic with only 2 points
3     0   2   3   5  5  12 10 23  // 3rd graphic with 4 points

次のような構造が必要な出力 cvs estructure:

code x  y
 1   1  0
 1   2  2
 1   3  3
 1   4  5
 2   1  1
 2   2  3
 3   0  2
 3   3  5
 3   5  12
 3  10  23

これは read.csv のみを使用して可能ですか? どんな助けにも感謝します、ありがとう!

4

1 に答える 1

1

Ricardo がコメントで指摘したように、これは直接実行できませんread.csv。代わりに、データを読み取り、 を使用reshapeして出力を取得できます。値などを含む行を削除するためにいくつかの追加手順を追加しましたNAが、これは完全に必要というわけではありません。

ご提示いただいたデータです。read.csvあなたはそれがCSVであると述べているので、おそらく.の代わりに使用するでしょうread.table.

out <- read.table(text = "code  x   y   x   y  x  y  x  y
1     1   0   2   2  3  3  4  5   // 1rst graphic with 4 points
2     1   1   2   3               // 2nd graphic with only 2 points
3     0   2   3   5  5  12 10 23  // 3rd graphic with 4 points", 
                  fill = TRUE, comment.char = "/", header = TRUE)

最初の「x」と「y」のペアの名前を変更して、「.0」が追加されるようにします。

names(out)[2:3] <- c("x.0", "y.0")
out
#   code x.0 y.0 x.1 y.1 x.2 y.2 x.3 y.3
# 1    1   1   0   2   2   3   3   4   5
# 2    2   1   1   2   3  NA  NA  NA  NA
# 3    3   0   2   3   5   5  12  10  23

reshape目的のデータ フォームを取得するために使用します。

outL <- reshape(out, direction = "long", idvar="code", varying = 2:ncol(out))
outL <- outL[order(outL$code), ]
outL[complete.cases(outL), -2]
#     code  x  y
# 1.0    1  1  0
# 1.1    1  2  2
# 1.2    1  3  3
# 1.3    1  4  5
# 2.0    2  1  1
# 2.1    2  2  3
# 3.0    3  0  2
# 3.1    3  3  5
# 3.2    3  5 12
# 3.3    3 10 23
于 2013-09-27T01:54:24.797 に答える