如何在R中重新安排我的数据帧

如何在R中重新安排我的数据帧,r,dataframe,reshape,tabular,R,Dataframe,Reshape,Tabular,我有24行数据和2820列。如何将这张大桌子水平拆分为垂直,每60列剪切一次,并将其堆叠在一起: 这是一张12列6行的样本图片: 之前: 之后: 我不确定我是否理解这个问题,尽管我认为你想要的是熔化函数。这会将宽数据集转换为长数据集。话虽如此,我不知道你的意图是什么,所以我不确定数字60是否有任何重要性 如果melt是您想要的,您可以通过指定一个id变量来使用它,假设它的col1,其他所有内容都将自动成为一个变量。如果您的表名为x: col1 col2 col3 col4 ... A

我有24行数据和2820列。如何将这张大桌子水平拆分为垂直,每60列剪切一次,并将其堆叠在一起:

这是一张12列6行的样本图片:

之前:

之后:


我不确定我是否理解这个问题,尽管我认为你想要的是熔化函数。这会将宽数据集转换为长数据集。话虽如此,我不知道你的意图是什么,所以我不确定数字60是否有任何重要性

如果melt是您想要的,您可以通过指定一个id变量来使用它,假设它的col1,其他所有内容都将自动成为一个变量。如果您的表名为x:

col1  col2  col3  col4  ...
A     22     5    17
B     43     6    54
...

melt(x, id.vars = col1)

col1  variable  value
A     col2      22     
A     col3      5
A     col4      17
...

包括一个简化示例,您可以执行以下操作:

# sample data
myMat <- matrix(rnorm(24*282), nrow = 24)

myList <- lapply(1:(282/6), function(x) myMat[, (6*(x-1)+1):(6*x)])

myNewMat <- do.call("rbind", args = myList)

dim(myNewMat)
## [1] 1128    6
mydf
#   X_1      X_2  X_3 X_4 X_5      X_6  X_7 X_8 X_9     X_10  X_11 X_12
# 1  A1 1/1/2016 2:30   5  D1 1/1/2017 5:30  15  A2 5/1/2016 12:30   50
# 2  B1 1/2/2016 3:30   5  E1 1/2/2017 6:30  25  B2 5/2/2016 13:30  500
# 3  C1 1/3/2016 4:30   8  F1 1/3/2017 7:30  80  C2 5/3/2016 14:30  800

library(data.table)
rbindlist(split.default(mydf, 0:(ncol(mydf)-1) %/% 4))
#    X_1      X_2   X_3 X_4
# 1:  A1 1/1/2016  2:30   5
# 2:  B1 1/2/2016  3:30   5
# 3:  C1 1/3/2016  4:30   8
# 4:  D1 1/1/2017  5:30  15
# 5:  E1 1/2/2017  6:30  25
# 6:  F1 1/3/2017  7:30  80
# 7:  A2 5/1/2016 12:30  50
# 8:  B2 5/2/2016 13:30 500
# 9:  C2 5/3/2016 14:30 800

@RolandASc答案的变化如下:

# sample data
myMat <- matrix(rnorm(24*282), nrow = 24)

myList <- lapply(1:(282/6), function(x) myMat[, (6*(x-1)+1):(6*x)])

myNewMat <- do.call("rbind", args = myList)

dim(myNewMat)
## [1] 1128    6
mydf
#   X_1      X_2  X_3 X_4 X_5      X_6  X_7 X_8 X_9     X_10  X_11 X_12
# 1  A1 1/1/2016 2:30   5  D1 1/1/2017 5:30  15  A2 5/1/2016 12:30   50
# 2  B1 1/2/2016 3:30   5  E1 1/2/2017 6:30  25  B2 5/2/2016 13:30  500
# 3  C1 1/3/2016 4:30   8  F1 1/3/2017 7:30  80  C2 5/3/2016 14:30  800

library(data.table)
rbindlist(split.default(mydf, 0:(ncol(mydf)-1) %/% 4))
#    X_1      X_2   X_3 X_4
# 1:  A1 1/1/2016  2:30   5
# 2:  B1 1/2/2016  3:30   5
# 3:  C1 1/3/2016  4:30   8
# 4:  D1 1/1/2017  5:30  15
# 5:  E1 1/2/2017  6:30  25
# 6:  F1 1/3/2017  7:30  80
# 7:  A2 5/1/2016 12:30  50
# 8:  B2 5/2/2016 13:30 500
# 9:  C2 5/3/2016 14:30 800
要对包含2820列的data.frame每60列执行一次此操作,可以使用以下方法创建拆分索引:

0:(2820-1) %/% 60
样本数据:

mydf <- data.frame(
  X_1 = c("A1", "B1", "C1"), X_2 = c("1/1/2016", "1/2/2016", "1/3/2016"), 
  X_3 = c("2:30", "3:30", "4:30"), X_4 = c(5, 5, 8), 
  X_5 = c("D1", "E1", "F1"), X_6 = c("1/1/2017", "1/2/2017", "1/3/2017"), 
  X_7 = c("5:30", "6:30", "7:30"), X_8 = c(15, 25, 80), 
  X_9 = c("A2", "B2", "C2"), X_10 = c("5/1/2016", "5/2/2016", "5/3/2016"), 
  X_11 = c("12:30", "13:30", "14:30"), X_12 = c(50, 500, 800)
)

在寻求帮助时,您应该包括一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案对不起,我刚刚上传了一些示例来说明问题。谢谢。我认为这里的问题不在于宽长。我的理解是,他们只想将1-60、61-120…2761-2820列切分,然后将这些切分基本上重新绑定在一起。这是一件危险的事情,除非这些列一开始就没有独立的含义,在这种情况下,为什么他们不在同一列开始wiith?但我同意这听起来像是op在问的。是的,我想把桌子切成薄片。列没有独立的含义。我将此表作为数据框。下面的答案适用于data.frame,与矩阵相同