我有一个数据集,它有一个从1-182天的列。我想把这个数据集分割成更小的30天数据帧。但是,我希望数据帧形成如下:
Dataframe 1:第1天-第30天(第1-30行)
Dataframe 2:第2天-第31天(第2-31行)
Dataframe 3:第3天-第33天(第3-32行)等等。
我已经知道如何在30天前分开,但却找不到像这样分裂的方法!请告诉我如何使用R中的一些函数来完成这个任务。
发布于 2020-12-04 01:25:04
假设您有这样一个data.frame:
set.seed(1)
d <- data.frame(matrix(sample(20, 30, TRUE), ncol = 3))
# X1 X2 X3
# 1 6 5 19
# 2 8 4 5
# 3 12 14 14
# 4 19 8 3
# 5 5 16 6
# 6 18 10 8
# 7 19 15 1
# 8 14 20 8
# 9 13 8 18
# 10 2 16 7..。创建标识感兴趣行的矩阵。在这里,我感兴趣的是每三行,因此1-3,2-4,3-5,.,8-10.为你的案子把"3“改为30。
m <- embed(1:nrow(d), 3)
m
# [,1] [,2] [,3]
# [1,] 3 2 1
# [2,] 4 3 2
# [3,] 5 4 3
# [4,] 6 5 4
# [5,] 7 6 5
# [6,] 8 7 6
# [7,] 9 8 7
# [8,] 10 9 8有了这些之后,在索引中使用lapply提取相关的行。
lapply(1:nrow(m), function(x) d[rev(m[x, ]), ])
# [[1]]
# X1 X2 X3
# 1 6 5 19
# 2 8 4 5
# 3 12 14 14
#
# [[2]]
# X1 X2 X3
# 2 8 4 5
# 3 12 14 14
# 4 19 8 3
#
# [[3]]
# X1 X2 X3
# 3 12 14 14
...
...
# [[7]]
# X1 X2 X3
# 7 19 15 1
# 8 14 20 8
# 9 13 8 18
#
# [[8]]
# X1 X2 X3
# 8 14 20 8
# 9 13 8 18
# 10 2 16 7结果是您的list的data.frame。如果您真的希望在您的工作区中将所有的子集作为单独的data.frame,您可以使用list2env。
https://stackoverflow.com/questions/65136489
复制相似问题