在 R 中将数据从行重塑为列

Reshape data from row to column in R

我有以下格式的数据。

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 中实现?

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

数据

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

将第一行设为您的 header

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