在R中重塑行中的数据

时间:2017-10-12 09:25:35

标签: r reshape

我有以下格式的数据。

Name    Value
282.08  27.91
284.07  19.08
286.06  18.8 
Name    Value
282.08  44.19
284.07  28.24
286.06  27.82
Name    Value
282.08  46.51
284.07  27.48
286.06  26.32

列名具有相同的值。我希望以下列格式提供数据

Name    Value   Name    Value   Name    Value
282.08  27.91   282.08  44.19   282.08  46.51
284.07  19.08   284.07  28.24   284.07  27.48
286.06  18.8    286.06  27.82   286.06  26.32

如何在R中完成?

1 个答案:

答案 0 :(得分:1)

这应该对你有用,一般来说,应该避免你要求的输出[重复的列名和多列中相似含义的值(如名称)]

数据

df <- read.table(text="Name    Value
282.08  27.91
284.07  19.08
286.06  18.8 
Name    Value
282.08  44.19
284.07  28.24
286.06  27.82
Name    Value
282.08  46.51
284.07  27.48
286.06  26.32", header=FALSE)

首先将数据拆分为列表

result <- split(df, cumsum(grepl("Name", df$V1)))
# $`1`
      # V1    V2
# 1   Name Value
# 2 282.08 27.91
# 3 284.07 19.08
# 4 286.06  18.8

# $`2`
      # V1    V2
# 5   Name Value
# 6 282.08 44.19
# 7 284.07 28.24
# 8 286.06 27.82

# $`3`
       # V1    V2
# 9    Name Value
# 10 282.08 46.51
# 11 284.07 27.48
# 12 286.06 26.32

使用Reduce("cbind", ...)

将列表组合成宽格式
ans <- Reduce("cbind", result)
      # V1    V2     V1    V2     V1    V2
# 1   Name Value   Name Value   Name Value
# 2 282.08 27.91 282.08 44.19 282.08 46.51
# 3 284.07 19.08 284.07 28.24 284.07 27.48
# 4 286.06  18.8 286.06 27.82 286.06 26.32

将标题设为第一行

colnames(ans) <- ans[1,]
ans <- ans[-1,]