【问题标题】:R data frame: Transposing rows into a column in a cycleR数据框:在一个循环中将行转置为一列
【发布时间】:2014-06-19 22:54:35
【问题描述】:

由于我的数据框的重组,我处于程序块中。

我有以下数据框结构:

> nrow(data)
[1] 731
> ncol(data)
[1] 25

HE01 HE02 HE03 ... HE24 HE25
1)value1 value 2 value 3 ... value 24 value 25
...
731) value 1 value 2 value 3 ... value 24 value 25

我的目的是按以下方式重组数据: 1)将列名放在前面的特定列中 2) 将每一行的值插入到每个对应列名旁边的列中,并在从 1 到 25 的循环中插入,然后再插入。

有点像这样:

HE01 value 1
HE02 value 2
...
HE25 value 25
and again for row number two
HE01 value 1
...
HE25 value 25
and again in this pattern till row number 731

我认为这可以通过某种循环来完成,但不知道具体如何。

提前感谢您的回答。

【问题讨论】:

  • melt 可能来自 reshape2?还是stack
  • 相关搜索词有“宽格式”和“长格式”。

标签: r loops dataframe reshape transpose


【解决方案1】:

因为我不喜欢在 cmets 中回答......

想象一下你是从这个开始的:

set.seed(1)
M <- data.frame(
  matrix(rnorm(25), ncol = 5,
         dimnames = list(NULL, paste0("HE", 1:5))))
M
#          HE1        HE2        HE3         HE4         HE5
# 1 -0.6264538 -0.8204684  1.5117812 -0.04493361  0.91897737
# 2  0.1836433  0.4874291  0.3898432 -0.01619026  0.78213630
# 3 -0.8356286  0.7383247 -0.6212406  0.94383621  0.07456498
# 4  1.5952808  0.5757814 -2.2146999  0.82122120 -1.98935170
# 5  0.3295078 -0.3053884  1.1249309  0.59390132  0.61982575

试试:

stack(M)

reshape(M, direction = "long", varying = 1:5, sep = "")

data.frame(ind = rep(names(M), each = ncol(M)), 
           val = unlist(M))

library(reshape2)
melt(M)

鉴于您描述的问题,第一个选项对我来说最有意义。

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多