【问题标题】:Reshape data from row to column in R在R中从行到列重塑数据
【发布时间】:2017-10-12 09:25:35
【问题描述】:

我有以下格式的数据。

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 中做到这一点?

【问题讨论】:

  • 尝试使用 excel 来管理您的数据,然后将其保存。上传到 R.
  • 我有一个庞大的数据集,但为了表示,我只保留了 3 行和 3 个数据集。原始数据集包含 121 个这样的块,每个块有 512 行。

标签: r reshape


【解决方案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,]

【讨论】:

  • 非常感谢它的工作。只有最后两行,即将第一行作为标题不起作用。
  • 您是否收到错误消息?它没有提供您期望的输出吗?
  • 不,它没有显示任何错误。但是列名以一些任意数字出现。我以 .csv 格式保存了“ans”,然后删除了第一行,它为我提供了所需的结果。再次非常感谢您的及时帮助。它节省了我很多时间。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 2016-12-11
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多