我有24行数据和2820列。如何将这个大的水平表拆分为垂直,每60个列切割一次并将它们堆叠在一起:
这是12 col和6行的示例图片:
在:
后:
答案 0 :(得分:0)
我不确定我理解这个问题,但我认为你所寻找的是融合()函数。这会将您的宽数据集转换为长数据集。话虽如此,我不知道你的意图是什么,所以我不确定数字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
...
答案 1 :(得分:0)
包括简化示例,您可以执行以下操作:
# 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
答案 2 :(得分:0)
@ RolandASc答案的变体如下:
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)
)