【问题标题】:"pile" columns on top of each other [duplicate]“堆”列彼此顶部[重复]
【发布时间】:2021-09-06 07:03:13
【问题描述】:

我正在使用 R 编程语言。假设我有以下数据集:

a = rnorm(10,10,10)

b = rnorm(10, 6, 7)

c = rnorm( 10, 5, 5)

d = data.frame(a,b,c)

 head(d)
           a          b          c
1 18.3615091 -1.1253320  0.3403199
2  4.9365020  2.4014072 -3.5771919
3 12.5686200  0.7474177 -4.6788551
4  0.1913607 -0.6456205  3.8693564
5  9.1718179 16.1776224  8.1820692
6 18.3757202  4.1313655 -0.4195688

是否可以将此数据集转换为单列数据(即 1 列和 30 行)?

我尝试了几种方法:

#first way
d = data.frame(a + b + c)

#second way

d = cbind(a,b,c)

#third way 

d = rbind(a,b,c)

但似乎没有任何效果。

有人可以告诉我怎么做吗?

谢谢

【问题讨论】:

  • 试试stack(d)...
  • 感谢您的回答!我试过这段代码 d = stack(a,b,c) 并​​得到以下错误:
  • data.frame(values = unlist(unname(x)), ind, stringsAsFactors = FALSE) 中的错误:参数暗示不同的行数:10, 0 另外:警告消息:在 if ( drop) { : 条件长度 > 1 并且只使用第一个元素
  • 堆叠数据框d,而不是每个向量...即stack(d)
  • 谢谢!这行得通!

标签: r data-manipulation


【解决方案1】:

您可以先将数据框转换为矩阵。 R中的矩阵存储在column-major order中,所以(*)如果将矩阵转换为向量,您将得到堆叠列作为向量:

as.vector(as.matrix(d))

如果你想要数据框:

data.frame(stack = as.vector(as.matrix(d)))

(*) 在 R 中,矩阵只是一个具有维度属性的向量,数据以列优先顺序存储在向量中。例如:

structure(1:4, dim = c(2, 2))

     [,1] [,2]
[1,]    1    3
[2,]    2    4

将矩阵转换为向量时,只需删除维度即可。

as.vector(.Last.value)

[1] 1 2 3 4

【讨论】:

    【解决方案2】:

    你可以试试stackreshape2::melttidyr::pivot_longer

    stack(d)
    reshape2::melt(d)
    tidyr::pivot_longer(c(a,b,c))
    

    会起作用的。

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2017-12-27
      相关资源
      最近更新 更多