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

正如里卡多在评论中指出的那样,这不能直接使用read.csv. 相反,您可以读取数据,然后使用它reshape来获取输出。我添加了一些额外的步骤来删除带有NA值的行等等,但这并不是完全必要的。

数据,正如您所呈现的那样。你提到它是一个 CSV,所以你可能会使用read.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 回答