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